sed是linux下的一种文本流编辑器。
sed - stream editor for filtering and transforming text. A stream editor is used to perform basic text transformations on an input stream (a file or input from a pipeline).
sed和vim的命令有着相似之处,例如删除d,插入i,增加a,匹配/regexp/,替换s/regexp/replacement/等。
一般来说sed有着如下经常用法。
删除行
假设文件名为test.txt
$ cat <<EOF >test.txt
> Can you feel my warm?
> How about having dinner with me?
> How am supposed to live without you?
> How many times you stand up for youself.
> EOF
$ grep -ni 'how' test.txt
输出
这里要注意一下引号是单引号 '
那么sed删除第三行的命令为
$ sed '3d' test.txt
输出
在某行前插入一行
在末行前插入某行
$ sed '$i\It does not matter to me.' test.txt
输出
在第3行前插入某行
$ sed $'3i \Yes, I\'d like to.' test.txt
命令前的'$'表示'\'后的内容将被转义。
输出
在某行后附加一行
在末行后附加某行
$ sed '$a\localhost 127.0.0.1' test.txt
输出
这里反斜杠\
转义也可以没有。
在第四行后附加某行
$ sed '4a\So many times.' test.txt
输出
替换匹配到的字符
替换文本中所有匹配的字符
$ sed 's/How/Why/g' test.txt
输出
仅替换第2到3行匹配的字符
$ sed '2,3s/How/Why/g' test.txt
输出
仅替换末行匹配的字符
$ sed '$s/How/Why/g' test.txt
输出
保存编辑结果到文件
管道输出
$ sed '$s/How/Why/g' test.txt > out.txt
$ cat out.txt
输出
覆盖原文件,加-i选项
$ sed -i '$s/How/Why/g' test.txt
$ cat test.txt
输出
sed作为一种文本流编辑器,从管道或文本文件中读取文本,然后编辑,在数据流替换和脚本控制中有较大的发挥空间。