当前位置:主页 > 查看内容

Linux学习日记-sed的总结

发布时间:2021-09-10 00:00| 位朋友查看

简介:Linux文本三剑客---sed sed 是什么 sed 是一种支持正则表达式的非交互式流编辑器stream editor — 这个编辑器的流代表的是文本流。sed 可以用来修改和替换文本的内容理解为一个文本的加工工厂工作方式是从第一行开始一行一行对需要处理的数据进行加工。 sed……

Linux文本三剑客---sed

sed 是什么?
sed 是一种支持正则表达式的非交互式流编辑器,stream editor — 这个编辑器的流代表的是文本流。sed 可以用来修改和替换文本的内容,理解为一个文本的加工工厂,工作方式是从第一行开始一行一行对需要处理的数据进行加工。

sed 常用的方法

-i可以对源文件的内容进行修改 – 这个用法比较重要
-n只显示匹配处理的行,没有-n就会输出所有的内容
-r支持扩展正则表达式
-f从脚本文件中读取命令并执行
-e执行多个编辑命令( 可以用 ; 代替 )

sed 常用编辑命令和方法的组合总结

p: print 打印匹配行

sed -n '3,7p'  文件名  # 输出文件 3 到 7 行的内容

sed -n '1p;3p;5p' 文件名 # 输出文件第 1、3、5 行的内容

sed -n '1,$p' 文件名  # 输出文件 1 到 最后一行

sed -n '2,+2p' 文件名  # 从第二行开始,往下再来两行,也就是第二行到第四行

sed -n '5,100!p' 文件名 # 不输出 5 到 100 行,这里 !p 就是取反的意思

sed -n '1~2p' 文件名 # 步长命令,从 1 开始,每次加 2 输出,这里也就是输出奇数行的意思

sed -n '/bash/p' 文件名 # 能输出含有 bash 的行
这个功能就是sed的查找功能了  用 egrep bash 或者  awk '/bash/' 也能实现同样功能

要记住,一般 p 是会同 n 一起使用的,n 和 p 是黄金搭档

d: delete 删除指定行

sed '3,5d' 文件名 # 删除 3-5 行

sed '/2/d' 文件名 # 删除包含数字 2 的行

sed 'etc3/!d' 文件名 # 出了etc3 的行 其他的全部删除 同样 !d 是取反的意思

这里要特别注意,-n 后面不能使用编辑命令 d , 因为东西被删除了之后是显示不出来的!

a: append 在匹配行后面追加S

sed '1a ameame' 文件名 # 在第一行后面追加 ameame 的内容

然后需要注意的是 这个追加是另起一行进行追加

s: substitute 字符串替换 核心功能

sed 's/文本1/文本2/' filename # 只会将每行第一个文本1替换成文本2  只会替换每行的第一个!!!

sed 's/文本1/文本2/2' # filename 把每一行的第二个文本1替换成文本2

sed 's/文本1/文本2/g' filename # 会将每行所有的文本1替换成文本2

sed 's/文本1/文本2/2p' filename # 会将每一行从第二个开始 后面的所有文本1改换成文本2 简单说为就是不替换第一个

sed '/^#/ s/文本1/文本2/'  filename  # 将文件中以 # 开头的行里面的第一个文本1改换成文本2
		\n 换行
		\t tab
		\s 空白 这个sed不支持 只能用上面两个

sed -n '2,10 s/^/#/' filename # 在文件的第二行到第十行在开头加上# 把它注释掉

sed -i '/文本1/ s/文本2/文本三/' filename # 把文件有文本1的行里面把文本二的内容替换成文本三

w: write 将文本写入 这个功能不厉害 少用

sed '/^#/!w xxx.txt' filename   # 将目标文件的非#号开头的内容写进xxx.txt文件中```

r: read 将文件的内容读入 有这么回事 不经常用

c: 整行替换

sed -i '1c  xxxxxx' filename  将文件第一行的内容改成xxxxxx

sed -i '/^#Port/c Port 2233' sshd_config
	      # 将#Port开头的那一行的内容改成 Port 2233 在sshd_config中进行改动

i: insert 在匹配行前面插入

sed '1i qqqqqq' filename  
 # 在第一行前面追加qqqqqq 这个追加也是另起一行  在目标行的前面追加

补充一下 sed 标签的用法

echo aa bb cc | sed -r 's/([a-z]+) ([a-z]+) ([a-z]+)/\3 \2 \1 /'
# 输出结果为: cc bb aa  就是后面对输出内容进行标号排序

后续还有Linux文本三剑客中的其他两个 – grep 和 awk

;原文链接:https://blog.csdn.net/CNdota_never_die/article/details/115863368
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!
上一篇:外部网关协议----BGP及实验 下一篇:没有了

推荐图文


随机推荐