sed替换
1. sed可以替换给定的文本中的字符串,可以利用正则表达式进行匹配
$ sed 's/pattern/replace_string/' file
或者
$ cat file | sed 's/pattern/replace_string/' file
使用-i选项,可以将替换的结果应用于原文件,也可以借助重定向来保存文件:
sed 's/text/replace/' file > newfile
其实可以使用
sed -i 's/pattern/replace_string/' file
后缀/g意味着替换每一处,有时候不需要替换前N处匹配,有一个选项可以用来忽略前N处匹配,并从第N+1处开始替换。
$ echo this thisthisthis | sed 's/this/THIS/2g'
$ echo this thisthisthis | sed 's/this/THIS/3g'
当需要从第N处开始匹配时,可以使用/Ng
字符/在sed中作为定界符使用,也可以用其他字符代替。
1. 删除空白行
sed '/^$/d' file
2. 已匹配的字符串标记&
echo this is an example | sed 's/\w\+/[&]/g'
正则表达式\w\+匹配每个单词,然后用[&]来替换它,&对应于之前所匹配的单词。
3. 子串匹配标记\1
&代表匹配给定样式的字符串,但我们也可以匹配给定样式的其中一部分
echo this is digit 7 in a number | sed 's/digit \([0-9]\)/\1/'
这条命令将digit 7 替换成7,样式中匹配到的子串是7,\(pattern\)用于匹配子串,模式被包括在使用斜线转义过的()中,对于匹配到的第一个子串,其对应的标记是\1,匹配到的第二个子串是\2,往后依次类推,下面示例中包含了多个匹配:
echo seven EIGHT | sed 's/\([a-z]\+\) \([A-Z]\+\)/\2 \1/'
4. 引用
$text=hello
echo "hello world" | sed "s/$text/HELLO/"
5. 追加内容 sed ‘/匹配词/a\要加入的内容’ example.file(将内容追加到匹配的目标行的下一行位置)
i 插入内容 sed ‘/匹配词/i\要加入的内容’ example.file 将内容插入到匹配的行目标的上一行位置)
示例:
#我要把文件的包含“chengyongxu.com”这个关键词的行前或行后加入一行,内容为“allow chengyongxu.cn”
行前加
sed -i '/allow chengyongxu.com/i\allow chengyongxu.cn' the.conf.file
行前后
sed -i '/allow chengyongxu.com/a\allow chengyongxu.cn' the.conf.file
6. 删除指定行的上一行
sed -i -e :a -e '$!N;s/.*\n\(.*ServerName abc.com\)/\1/;ta' -e 'P;D' $file
删除指定字符串之间的内容
sed -i '/ServerName abc.com/,/\/VirtualHost/d' $filehttp://www.linuxso.com/shell/17542.html
7. 也可在vi模式下,将文本中的内容替换,esc : %s/dog/sdog/ 这样可以把文件直接修改,然后保存即可
在vi模式下也可进行区间替换,如将第2至第7行之间的cat 换成scat,esc : 2,7 s/cat/scat/ 同样保存修改即可
8. sed查找行,如查找出vsftpd.conf中的非注释行
[root@server4 shell]# cat vsfptd.conf | sed '/#/d'
删除空格行和以#号开头的行,并写入文件vsftpd.config,用-e开关连接两个控制语句
[root@server4 shell]# cat vsfptd.conf | sed -e'/^#/d' -e '/^$/d' >vsftpd.config
9. sed删除匹配的行的后续多行
$sed '/Storage/,+2d' thegeekstuff.txt
sed删除匹配行到尾行
$sed '/Website Design/,$d' thegeekstuff.txt
sed删除匹配行到首行