一. sed正则
^ 匹配行首,如:/^sed/匹配所有以sed开头的行。
$ 匹配行尾,如:/sed$/匹配所有以sed结尾的行。
. 匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d。
* 匹配0个或多个其前面的字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。
[] 匹配一个指定范围内的字符,如/[sS]ed/匹配sed和Sed。
[^] 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。
\(..\) 匹配子串,保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成lovers。
& 保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。
\< 匹配单词的开始,如:/\<love/匹配包含以love开头的单词的行。
\> 匹配单词的结束,如/love\>/匹配包含以love结尾的单词的行。
x\{m\} 重复字符x,m次,如:/0\{5\}/匹配包含5个0的行。
x\{m,\} 重复字符x,至少m次,如:/0\{5,\}/匹配至少有5个0的行。
x\{m,n\} 重复字符x,至少m次,不多于n次,如:/0\{5,10\}/匹配5~10个0的行。
二. 简单应用
将每一行的第一个字符与最后一个字符对调
sed -r 's/(^.)(.*)(.$)/\3\2\1/' a.txt
-r 选项 支持扩展正则,"^." 第一个字符,".*" 中间内容,".$" 最后一个字符
将每一行的第2个字符与倒数第2个字符对调
sed -r "s/(^.)(.)(.*)(.)(.$)/\1\4\3\2\5/" a.txt
^.. 第二个字符 ..$ 倒数第二个字符
sed -n 'p;n' a.txt #打印奇数行
sed -n 'n;p' a.txt #打印偶数行
sed -n '$=' a.txt #统计行数
删除所有的‘abc’,所有的‘123’,所有的‘A’。或者关系用 \| 表示
sed 's/abc\|123\|A//g' a.txt
去掉注释与添加注释
sed 's/^#//' a.txt
sed 's/^/#/' a.txt
删除文件中每行的第二个、最后一个字符
sed 's/.//2;s/.$//' a.txt
将文件中每行的第一个、第二个字符互换
sed -r 's/(^.)(.)(.*)/\2\1\3/' a.txt
删除文件中所有的数字、行首的空格
sed -r 's/[0-9]//g;s/^( )+//' a.txt
为文件中每个大写字母添加括号
sed 's/[A-Z]/(&)/g' a.txt #使用“&”可调用s替换操作中的整个查找串