文本三剑客之Stream Editor
2020-07-24 09:54:20 30
sed全称是Stream Editor,正如其名,它是按照行的方式来处理文本的,主要用来实现内容的修改。sed 可以实现批量文本的替换、插人、修改和删除等操作。
1.替换
为了便于演示说明,我们首先创建了一个示例文本,内容如下所示。这是一个单词本
里面有大量的目标词汇bird。我们的目的是将bird替换成cat。
[rootestationl03 ~]# cat -n text
1 bird work good seak
2 mark bird bird rest
3 push deep bird bush
4 desk jeep need year
5 beat meet seat bird
为了便于演示,不对示例文件做真正的修改。如果你确定要修改文件内容,请使到它用选项-i。不添加i的话,sed 只会将修改结果dump到屏幕上。
一旦文件内容被修改, 将无法恢复,所以最好使用如下命令进行备份操作。
//在修改INPUT-FILE之前,会生成一个名为INPUT-FILE.bak的备份文件
# Sed -i.bak EDIT-COMMAND INPUT-FILE
文本替换的语法格式如下所示。
[Address]s/Pattern/Replacement/FLAGS
Address可以是数字或字符,可以是某一行,也可以是一个范围,为空则代表整个文档。如果Flags是数字,表示替换第x个匹配对象,为空的话就是1。如果Flags是g,则会替换所有匹配的对象。
# sed "3s/bird/cat/2" text //将第3行中的第二个 bird替换成cat
# sed "1,3s/bird/cat/g" text //将前3行中的bird普换成cat
# sed "/work/s/bird/cat/" text //将含有work一行的第一个bird 替换成cat
# sed "/work/,/push/s/bird/cat/g" text //将含有work和push行,将这些行之间的bird替换成cat
2.插入、修改和删除
除了替换,sed还可以实现插人、修改和删除的功能。
# sed "3i\cat" text //在第3行上方插入cat,cat将作为新的第3行
# sed "3a\cat" text //将第3行替换成cat,cat将作为新的第4行
# sed "3a\cat" text //将第3行替换成cat
# sed "3d" text /1 删除第3行
# sed "3r /root/text2" text //在第3行下方将另外一个文件text2的内容追加进去
从上面的示例中我们看到,内容插入只能从新的一行开始。 如果要实现在行首行尾的插入操作,还是要用到替换功能。替换位置中的&表示Pattern匹配到的内容。由于.*表示所有,即一整行,所以我们在&前后写入的内容就等于插入到了行首或行尾。
sed "3s/.*/cat &/" text //在第3行行首插入单词cat
sed "3g/.*/& cat/" text //在第3行行尾插入单词cat
睿江云官网链接:www.eflycloud.com