linux sed

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
posted @ 2022-09-14 12:41  liwenchao1995  阅读(24)  评论(0编辑  收藏  举报