sed
sed:编辑器, 主要处理没有规律的文本
正则表达式:
基本元字符:
匹配除换行符之外的任意单个字符: .
匹配零次或多次它前面的一个字符:*
匹配中括号中任意一个字符:[...]
正则表达式的第一个字符,在中括号里表示取反:^
正则表达式的最后一个字符:$
匹配前置字符出现n和m之间的任意次数:\{n,m\}
匹配前置字符出现n次:\{n\}
匹配前置字符至少出现n次:\{n,\}
(注:以上三个在扩展元字符中需要去掉\)
转义字符:\
扩展元字符:
匹配一次或多次它前面的一个字符:+
匹配零次或一次它前面的一个字符:?
正则表达式的分组:()
匹配前面或后面的正则表达式(只匹配其中的一个):|
sed:必须用//包裹起来
如;sed 's/旧字符串/新字符串/' 需要替换的文件
s处的函数:
a表示向该行后面插入,如'2a xx'就是在第二行后插入'xx'
i表示向该行前面插入,如'2i xx'就是在第二行前插入'xx'
c表示替换该行,如'3c xx'就是把第三行的内容替换成'xx'
d表示删除某行
r将r后面文件的内容读入到后面文件中某一行,如:'2r a' b,将a中的内容读入到b的第二行后
最后/后的函数:
n表示替换第n次出现的字符串,(取值范围1-512)
g表示替换所有匹配上的字符串
p打印模式空间的内容
w[file]写入到file文件中
&表示前面要替换的字符串
\n表示回调前面要替换的字符串,最多9个标签,与正则的分组配合使用
-f [sed脚本文件] [被处理的一个或多个文件]
-n 不打印模式空间的内容
-i 后面紧跟名字,备份修改前的文件
-r 扩展正则必加的参数
-e 多个命令一起执行的时候需要此选项,或用;号隔开
定址:
数字定址:
定址单行用数字来表示,如:1s,2p,3d等
从第一行到第三行:1,3
匹配第二行后的四行:2,+4
匹配从第四行到下一个3的倍数行:4,~3
从第一行起每隔三行的行:1~3
尾行:$
除了第三行以外的行:3!
正则定址:
删除所有行:d
只删除第三行:3d
删除空行:/^$/d
删除第五行到最后一行:5,$d
删除从第一行到空行之间的行:1,/^$/d
删除除了从第一行到第三行之外的行:1,3!d
删除.TS和.TE标记的tbl输入:/^\.TS/,/^\.TE/d
工作模式:模式空间和保持空间
模式空间初始化为空,处理完一行后会自动输出到屏幕并清除模式空间。
保持空间初始化为一个空行,也就是默认带一个\n,处理完后不会自动清除
h 把模式空间内容覆盖到保持空间中
H 把模式空间内容追加到保持空间中
g 把保持空间内容覆盖到模式空间中
G 把保持空间内容追加到模式空间中
x 交换模式空间与保持空间的内容
例:sed '{1h;2,3H;4G}' test
sed '{1h;2x;3g;$G}' test
颠倒输出:sed '1!G;h;$!d' rev.txt