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,20s/old/new/g 就是啦!
实例
//使用sed 在第四行后添加新字符串
//sed处理的文件不能是空的,它基于行来处理的文件流编辑器,如果文件为空的话,它是处理不了的
使用sed命令后,输出结果如下:
sed -e 4a\newline testfile
//在指定行前或后新增一行
//在包含www.baidu.com的行前面或后面添加多一行内容www.qq.com
//匹配行前加
sed -i '/www.baidu.com/i www.qq.com' domain.file
//匹配行后加
sed -i '/www.baidu.com/a www.qq.com' domain.file
//匹配下一行并修改
//n命令-->移动到匹配行的下一行,替换匹配到的行数的下一行
sed -i '/i love you/{n;s/year/year1/;}' sed.c
//sed 只替换匹配到的第一个
sed -i '0,/pattern/s/pattern/replacement/' filename
//3是第三行,a是插入在第三行后,第三行前就用i,aaa是要插入的内容
sed -i "3 a aaa" file
//n读入下一行到sed的模式空间;d删除模式空间内容
sed -i '/bangngfdggh/{n;d}' yourfile
//只要删除第 2 行
nl /etc/passwd | sed '2d'
//要删除第 3 到最后一行
nl /etc/passwd | sed '3,$d'
//在第二行插入,原本的第2行变成第3行
nl /etc/passwd | sed '2i drink tea'
//如果是要增加两行以上,在第二行后面加入两行字,例如 Drink tea or ..... 与 drink beer?
nl /etc/passwd | sed '2a Drink tea or ......\
> drink beer ?'
//将第2-5行的内容取代成为No 2-5 number
nl /etc/passwd | sed '2,5c No 2-5 number' + 文件(aaa.txt?)
//仅列出 /etc/passwd 文件内的第 5-7 行
nl /etc/passwd | sed -n '5,7p'
//搜索 /etc/passwd有root关键字的行
nl /etc/passwd | sed '/root/p'
//删除/etc/passwd所有包含root的行,其他行输出,第一行的匹配root已经删除了
nl /etc/passwd | sed '/root/d'
2 daemon:x:1:1:daemon:/usr/sbin:/bin/sh
3 bin:x:2:2:bin:/bin:/bin/sh
//etc/passwd中root对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔,这里把bash替换为blueshell,再输出这行:最后的q是退出
nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p;q}'
//一条sed命令,删除/etc/passwd第三行到末尾的数据,并把bash替换为blueshell
nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/'
//-e表示多点编辑,第一个编辑命令删除/etc/passwd第三行到末尾的数据,第二条命令搜索bash替换为blueshell。
//在 最后一行加入 # This is a test:
sed -i '$a # This is a test' regular_express.txt
//$ 代表的是最后一行,而 a 的动作是新增,因此该文件最后新增 # This is a test!
//要求:在1111之前添加AAA,方法如下:
sed -i 's/指定的字符/要插入的字符&/' 文件
sed -i 's/1111/AAA&/' aaa.txt
//要求:在1111之后添加BBB,方法如下:
sed -i 's/指定的字符/&要插入的字符/' 文件
sed -i 's/1111/&BBB/' /tmp/aaa.txt
001111BBB
//修改计划任务的时候用sed无法忽略前面的* * 8 * *,所以sed,注释计划任务
sed "s/^.*\/home\/tech\/crontab\/bin\/update_clamav.sh/#&/g" /var/spool/cron/root
//可以这样注释
sed -i '/time_test/s/^/#/g' /var/spool/cron/root
[root@linux06 ~]# crontab -l
// 要求:在每行的头添加字符,比如"HEAD",命令如下:
[root@localhost ~]# sed -i 's/^/HEAD&/' /tmp/input.txt
[root@localhost ~]# cat /tmp/input.txt
HEADnull
HEAD000011112222
HEAD
HEADtest
20
//要求:在每行的尾部添加字符,比如"tail",命令如下:
[root@localhost ~]# sed -i 's/$/&tail/' /tmp/input.txt
[root@localhost ~]# cat /tmp/input.txt
HEADnulltail
HEAD000011112222tail
HEADtail
HEADtesttail
//1."^"代表行首,"$"代表行尾
//2.'s/$/&tail/g'中的字符g代表每行出现的字符全部替换,如果想在特定字符处添加,g就有用了,否则只会替换每行第一个,而不继续往后找
[root@bj-lvs-mx-pop-lvs1 tmp]# sed "s/aaa A 211.150/aaa A 192/g" /tmp/aaa.txt
aaa A 192
saaa A 192
[root@bj-lvs-mx-pop-lvs1 tmp]# sed "s/^aaa A 211.150/aaa A 192/g" /tmp/aaa.txt
aaa A 192
saaa A 211.150