文章目录

  • ​​1.什么是流编辑器sed​​
  • ​​2.sed地址定位方式​​
  • ​​3.sed编辑命令​​

1.什么是流编辑器sed

  • sed是一个精简的,非交互式的流式编辑器,它在命令行中输入编辑命令和指定文件名,然后再屏幕上查看输出
  • 逐行读取文件内容存储再临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。原文件内容并没有改变。
  • sed简单用法
用法示例
sed [options] sed_cmds files

选项
-e 连接多个编辑命令
-f 指定sed脚本文件名
-n 阻止输入行自动输出
  • eg1:
sed ‘4,$d’ test.in     从第4-最后一行全删除
sed ‘3q’ test.in 处理到第3行的时候退出,与上面结果一致
sed ‘s/public/PUBLIC/’ test.in 只替换每行的第一个public
sed -n ‘s/public/PUBLIC/p’ test.in 包含public的行被输出,其他行被抑制输出
  • 指定多个命令的三种方法
1、用分号分隔命令
sed 's/public/PUBLIC/;s/north/NORTH/' test.in
2、每个命令前放置-e
sed -e 's/public/PUBLIC/' -e 's/north/NORTH/' test.in
3、使用分行命令功能,在输入单引号后按return键就会出现多行提示符(>)
sed '
> s/public/PUBLIC/
> s/north/NORTH/' test.in
  • 在脚本中使用sed命令
test.sed文件内容如下:
s/public/PUBLIC/
s/north/NORTH/

sed -f test.sed test.in

2.sed地址定位方式

  • sed命令语法
sed_cmd:使用格式: [address]sed_edit_cmd (通常用单引号括起来),
其中 address 为 sed 的行定位模式, 用于指定将要被 sed 编辑的行。如果省略,sed 将编辑所有的行。
sed_edit_cmd 为 sed 对被编辑行将要进行的编辑操作。
  • sed_cmd 中 address 的定位方式

3.sed编辑命令

  • 常用 sed 编辑命令
(1) p :打印匹配行
sed -n ‘3,5p’ test.in 打印第3-第5行// (‘3,5!p’)打印除了第3行-第5行的行
sed -n ‘/north/p’ test.in 只打印包含north的行

(2)= :显示匹配行的行号
sed -n '/north/=' test.in

(3)d :删除匹配的行
sed '/north/d' test.in

(4) a\ :在指定行后面追加一行或多行文本,并显示添加的新内容,该命令主要用于 sed 脚本中。
sed '/north/a\AAA\
>BBB\
>CCC' test
在包含north的行后面增加AAA,BBB,CCC


(5) i\ :在指定行前插入一行或多行,并显示添加的新内容,使用格式同 a\


(6)c\ :用新文本替换指定的行,使用格式同 a\


(7)l :显示指定行中所有字符,包括控制字符(非打印字符)
sed -n '/north/l' test.in

(8)s :替换命令,使用格式为:
[address]s/old/new/[gpw]
address :如果省略,表示编辑所有的行。
g :全局替换
p :打印被修改后的行
w fname :将被替换后的行内容写到指定的文件中

sed -n 's/north/NORTH/gp' test.in
sed -n 's/north/NORTH/w data' test.in

sed ‘s/[0-9][0-9]$/&.5/’ datafile 连续出现2个数字结尾的后面会增加.5
& 符号用在替换字符串中时,代表被替换的字符串

(9) r :读文件,将另外一个文件中的内容附加到指定行后。
sed ‘$r data’ test.in 读data文件的内容追加到test.in

(10) w :写文件,将指定行写入到另外一个文件中。
sed -n '/public/w data2' test.in

(11) n :将指定行的下面一行读入编辑缓冲区。
sed -n '/public/{n;s/north/NORTH/p}' test.in
读匹配public的行的下一行,然后对下一行进行处理,将north替换成NORTH,最后打印输出

对指定行同时使用多个 sed 编辑命令时,需用大括号 “ {} ” 括起来,命令之间用分号 “ ; ” 格开。
注意与 -e 选项的区别

(11) q :退出,读取到指定行后退出 sed。
sed '3q' test.in
  • 常用 sed 编辑命令小结
  • eg:sed命令示例
    Sed配合正则表达式能够发挥它的更大威力;
    以下两个命令都能显式vsftpd.conf中的配置行;
grep -v '^#' /etc/vsftpd/vsftpd.conf
匹配不包含#的行

cat /etc/vsftpd/vsftpd.conf | sed 's/^#.*$//g'| sed '/^$/d'
包含#的行替换成空行,然后删除空行