Linux下修改字符串的sed

Linux三剑客:grep,awk 和 sed,从功能上来说分别对应了查找,分段,修改。

我们这里聚焦在字符串修改上。

命令含义

sed的全称是 `stream editor`, 它的作用是根据定位到的数据行修改数据。

sed的格式是 `sed [OPTION]... {script-only-if-no-other-script} [input-file]`。 

option:
-n :使用安静(slient)模式。只有经过sed特殊处理的那一行(或者操作)才会被列出来。一般与p配合使用
-e expr1 -e expr2 -e expr3:直接在命令行模式上进行sed的动作编辑(add the script to the commands to be executed)
-f :直接将sed动作写在一个文件内,-f filename则可以执行filename 内的sed动作。
-r :sed的动作支持的是拓展正则表达式的语法(默认是基础正则表达式的语法)
-i[SUFFIX]:直接修改读取的文件内容,而不是由屏幕输出(如果提供了SUFFIX那么会做备份) 
n1,n2: n1,n2不见得会存在,一般代表选择进行动作的行数,举例来说,如果我的动作是需要在10到20之间进行的,则“10,20[动作行为]”。

script:


function:
a :新增
d :删除 (比较重要,测试工作中对数据处理时可快速去除无用信息,比如注释行,空白行等)
i :插入
p :打印 (一般与-n配合使用)
s :替换(重中之重!!!,s参数可以说是日常测试工作中对数据用sed清理过滤时使用率最高的了)

举个例子:` sed 's/待修改/修改结果/' `

例子1

表达式单引号中的s表示修改,/ 符号表示分隔,实际上将/换成其他符号也可以,只要能起到分隔作用就OK

$ echo "aaa|bbb}|cccbbb" | sed 's/bbb/BBB/'
aaa|BBB}|cccbbb  --- 只换了第一个bbb
$ echo "aaa|bbb}|cccbbb" | sed 's/bbb/BBB/g'
aaa|BBB}|cccBBB  --- 所有的bbb都换了

例子2

更换文本中所有的www为www3,同时做备份

样本数据

$: cat a
 2 http: // www. e290cx. org/index.html
 3 http: // www. e290cx. org/1.html
 4 http: //post.e290cx. org/index.html
 5 http: //mp3.e290cx. org/index.html
 6 http: // www. e290cx.org/3.html

替换与备份的命令 

sed -i.txt 's/www/www3/g' a

操作结果 

$: sed -i.txt 's/www/www3/g' a
$: cat a
 2 http: // www3. e290cx. org/index.html
 3 http: // www3. e290cx. org/1.html
 4 http: //post.e290cx. org/index.html
 5 http: //mp3.e290cx. org/index.html
 6 http: // www3. e290cx.org/3.html
$: cat a.txt
 2 http: // www. e290cx. org/index.html
 3 http: // www. e290cx. org/1.html
 4 http: //post.e290cx. org/index.html
 5 http: //mp3.e290cx. org/index.html
 6 http: // www. e290cx.org/3.html
$:

例子3

将文本中每行末尾的 : 都替换成 @ ,将 a 替换成 A ,并在文本末尾加上“ Sed Test ”

扫描二维码关注公众号,回复: 15053126 查看本文章

样本数据

$ cat a
a:
b:
c:
d:

这里需要有多个操作,需要多次使用`-e expr` 添加指令,同时这里是文本末尾添加,不是每行都添加,所以要有文本末尾的标记`$`

使用命令(即时使用` -i [SUFFIX] `做备份是一个好习惯)

$ sed -i.bak -e 's/:$/@/g' -e 's/a/A/' -e '$aSed Test' a

操作结果

$ sed -i.bak -e 's/:$/@/g' -e 's/a/A/' -e '$aSed Test' a
$ cat a
A@
b@
c@
d@
Sed Test
$ cat a.bak
a:
b:
c:
d:

更多内容: sed详解 - 知乎

猜你喜欢

转载自blog.csdn.net/qq_33882435/article/details/127532408
今日推荐