sed 's/test/trial/2' data4.txt # sed 编辑器只替换每行中第 2 次出现的匹配模式。
sed -n 's/test/trial/p' data5.txt # -n 选项会禁止 sed 输出,但 p 标记会输出修改过的行,将二者匹配使用的效果就是只输出被替换命令修改过的行
sed 's/test/trial/w test.txt' data5.txt # w 标记会将匹配后的结果保存到指定文件中
sed 's/\/bin\/bash/\/bin\/csh/' /etc/passwd # 在使用 s 脚本命令时,替换类似文件路径的字符串会比较麻烦,需要将路径中的正斜线进行转义
sed d 替换脚本命令
基本格式:[address]d
举例:
sed '3d' data6.txt # 删除 data6.txt 文件内容中的第 3 行
sed '2,3d' data6.txt # 删除 data6.txt 文件内容中的第 2、3行
sed '/1/,/3/d' data6.txt # 两个文本模式来删除某个区间内的行,sed 会删除两个指定行之间的所有行(包括指定的行),从匹配“1”的行开删,到匹配“3”的行停止
sed '3,$d' data6.txt # 删除 data6.txt 文件内容中第 3 行开始的所有的内容
sed a 和 i 脚本命令
基本格式:[address]a(或 i)\新文本内容
举例:
[root@localhost ~]# sed '1i\
> This is one line of new text.\
> This is another line of new text.' data6.txt # 将一个多行数据添加到数据流中,只需对每一行末尾(除最后一行)添加反斜线即可
sed c 替换脚本命令
基本格式:[address]c\用于替换的新文本
[root@localhost ~]# sed '3c\
> This is a changed line of text.' data6.txt #sed 编辑器会修改第三行中的文本
sed y 转换脚本命令
基本格式:[address]y/inchars/outchars/
举例:
sed 'y/123/789/' data8.txt # inchars 模式中指定字符的每个实例都会被替换成 outchars 模式中相同位置的那个字符
sed p 打印脚本命令
基本格式:[address]p
举例 :
sed -n '/number 3/p' data6.txt #-n 选项和 p 命令配合使用,我们可以禁止输出其他行,只打印包含匹配文本模式的行。
sed w 脚本命令
基本格式:[address]w filename
sed '1,2w test.txt' data6.txt #将数据流中的前两行打印到一个文本文件中
sed r 脚本命令
基本格式为:[address]r filename
sed '3r data12.txt' data6.txt #将 filename 文件中的内容插入到 address 指定行的后面
sed q 退出脚本命令
sed '2q' test.txt # 输出第 2 行之后,就停止
sed '/number 1/{ s/number 1/number 0/;q; }' test.txt # sed 命令会在匹配到 number 1 时,将其替换成 number 0,然后直接退出。
寻址方式
以数字形式表示行区间
sed '2s/line/row/g' file03.txt
sed '1,3s/line/row/g' file03.txt
sed '2,$s/line/row/g' file03.txt
用文本模式来过滤出行
sed '/third/s/line/row/g' file03.txt # => /pattern/command(pattern=third,command=s/line/row/g)
参考
Linux sed命令完全攻略(超级详细):c.biancheng.net/view/4028.html