Linux Sed

语法

sed [-hnV][-e<script>][-f<script文件>][文本文件]

# 参数说明
-e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。
-f<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
-h或--help 显示帮助。
-n或--quiet或--silent 仅显示script处理后的结果。
-V或--version 显示版本信息。

# 动作说明
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!

替换文件指定内容

1、将dog替换为cat,替换并输出(不修改源文件):
sed  's/dog/cat/g' file  //dog被替换的内容,cat替换的内容

2、备份后直接替换至源文件:
sed -i.bak 's/dog/cat/g' file

3、替换第n行到第m行:
sed 'n,ms/dog/cat/g' file  //n、m为数字

4、替换内容A和B之间的内容:
sed '/A/,/B/s/dog/cat/g' file  //替换A和B之间的内容

5、一次替换多个多个内容:
sed  -e 's/dog1/cat1/g' -e 's/dog2/cat2/g' file

6、在文件第四行添加
sed -e '4a\newLine' testfile 

7、在文件第四行前添加
sed -e '4i\newLine' testfile 

8、替换匹配行
sed -i '/:INPUT/c:INPUT DROP [0:0]' iptables

cat ifcfg-ens33 |grep -n ONBOOT //获取匹配字符行及行数
sed -i '/ONBOOT/d' ifcfg-ens33  //删除匹配字符行

# 匹配行前后加指定内容
i 插入内容 sed '/匹配词/i\要加入的内容' example.file 将内容插入到匹配的行目标的上一行位
sed -i '/allow linux.com/i\allow linux.cn' the.conf.file

a 追加内容 sed '/匹配词/a\要加入的内容' example.file(将内容追加到匹配的目标行的下一行位置)
sed -i '/allow linux.com/a\allow linux.cn' the.conf.file

删除文件指定内容

sed -i '1d' a.txt    //删除第一行
sed -i '$d' a.txt    //删除最后一行
sed '/^$/d' a.txt    //删除所有空行
sed -i '12d' /etc/sysconfig/iptables   //删除第12行
sed -i '/preSql/d' a.txt  //删除匹配到preSql的行
sed -i '3~2d' a.txt    //从第三行开始,每隔一行删除
sed -i '4,8d' a.txt   //删除从第4行到第8行
sed -i '/Website Design/,$d' a.txt  //从匹配行到末尾行
sed -i '/Storage/,+2d' a.txt  //删除匹配行和之后两行
sed -i 's/\.$/\!/g' regular_express.txt  //将文件内每一行结尾若为 . 则换成 !

nl /etc/passwd | sed '2d'  //删除文件2行
nl /etc/passwd | sed '2,5d'  //删除文件2-5行
nl /etc/passwd | sed '3,$d'  //删除文件3行到最后

nl /etc/passwd | sed '2a drink tea'  //第二行后添加
nl /etc/passwd | sed '2a drink tea'  //第二行前添加
nl /etc/passwd | sed '2a Drink tea or ......\ > drink beer ?'  指定位置添加多行 (以 \ 分割)

nl /etc/passwd | sed '2,5c No 2-5 number'  //将第2-5行替换指定内容
nl /etc/passwd | sed -n '/root/p'  //搜索数据并显示
nl /etc/passwd | sed  '/root/d'  //搜索数据并删除
nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/' //执行多操作,删除第3行到末尾,并替换字符