ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

linux sed

2022-09-14 13:02:44  阅读:221  来源: 互联网

标签:aaa passwd etc sed linux txt root


目录

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

标签:aaa,passwd,etc,sed,linux,txt,root
来源: https://www.cnblogs.com/liwenchao1995/p/16692643.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有