Linux学习日记-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

你可能感兴趣的:(Linux,sed,linux,shell,正则表达式)