Sed¶
Stream Editor,流文本编辑器,更准确地说是:行文本处理器,主要用于批量替换文本、删除行、插入行和其他简单的文本操作。
替换指令¶
sed -参数 "/reg/寻址s/pattern/string/标识位" filename1 filename2 ...
- 为了防止元字符被解释为通配符,一般用单引号做引用,但如果要使用转义,则需要使用双引号
- 分割线/也可以换成其他的
- filename 后面可以加 > 输出重定向到其他文件
- new如果为空,则相当于删除
参数
-n
仅返回处理过的行,不加默认返回所有行-i
对文件实际修改,不加默认只是预览-r
可使用扩展正则表达式,不加默认使用基础正则(需要转义)-e
执行多个命令
标识位
- 默认只处理每行第一次匹配到的字符,加g后则是全局匹配
寻址
- n:第n行
-
$:最后一行
-
n,m:第n行到第m行
- n,m!:非第n行到第m行
-
n~x:从第n行开始,每隔x行匹配一次
-
,+x:匹配行+x行
- ,$ :匹配行到最后一行
多指令¶
sed -e 's/old/new/' -e 's/old/new/' filename
sed 's/old/new/;s/old/new/' filename
sed '/正则表达式/{s/old/new/;s/old/new/}' filename
脚本文件¶
sed -f 脚本文件 filename
其它¶
sed '/xx/n'
下一行
sed '/xx/p'
打印,常与-n共用
sed '/xx/='
打印行号
多行处理¶
即将多行合并为一行后再处理
模式空间¶
N 将下一行合并到匹配行 N;N 将下两行合并到匹配行
D 删除模式空间中第一个字符到第一个换行符
P 打印模式空间中第一个字符到第一个换行符
保持空间¶
- 将模式空间内容存放到保持空间
- h 覆盖
-
H 追加
-
将保持空间内容取回到模式空间
- g 覆盖
-
G 追加
-
交换模式空间和保持空间内容
追加¶
a 可以使用\n达到追加多行的目的
示例¶
sed -n "$=" 1.txt #打印1.txt文件最后一行的行号(即文件有多少行,和wc -l 功能类似)
“/匹配内容/要替换的内容”
建议使用双引号,单引号内无法转义
“/a”:匹配含有a的行
“/a\|b”:匹配含有a或b的行
“/^$”:匹配空行
增
a:向匹配行后插入内容
sed '3ahello' 1.txt
向第三行后面添加hello
i:向匹配行前插入内容
sed '/123/ihello' 1.txt
在包含123的行之前插入hello,如果有多行包含123,则包含123的每一行之前都会插入hello
r:将内容读入文件
删
d:删除匹配行的内容
sed '1~2d' 1.txt
删除奇数行
sed '/xxx/d' 1.txt
删除匹配xxx的行
sed '/^$/d' 1.txt
删除空行
sed '/a\|b/!d' 1.txt
删除不匹配a或b的行
sed '1,3{/a/d}' 1.txt
删除1~3行中的匹配内容a的行
改
c:更改匹配行的内容
sed '/123/chello' 1.txt
将包含123的行替换为hello
s:替换匹配行的内容
sed 's/123/hello/' 1.txt
将文件中的123替换为hello,默认只替换每行第1个123
sed 's/123/hello/2' 1.txt
将每行中第2个匹配的123替换为hello
sed 's/123/hello/g' 1.txt
将文本中所有的123都替换为hello
sed -n 's/123/hello/gpw 2.txt' 1.txt
将每行中所有匹配的123替换为hello
并将替换后的内容打印,然后写入2.txt
查:通常与-n参数一起用
p:打印匹配行的内容,通常与-n选项一起用
=:打印匹配行的行号
n:读取下一行
w:将匹配内容写入到文件