打印某行到某行之间的内容
例如:有个文件test的内容如下:
[abcfd]
[rty]
fgfgf
怎么能截取[abcfd]到[rty]之间的内容呢?
参考:
sed -nr '/[abcfd]/,/[rty]/p' tets
。sed单引号中命令可以有范围匹配和指定动作,范围可以是像
1,5
指定行,也可以把数字换成匹配行内容的正则表达式。
sed转换大小写
sed中,使用
\u
表示大写,
\l
表示小写。
例1. 把每个单词的第一个小写字母变大写:
sed 's/\b[a-z]/\u&/g' filename
\b
代表单词开始或结尾,&代表当下匹配的整体。
例2. 把所有小写变大写:
sed 's/[a-z]/\u&/g' filename
例3. 大写变小写:
sed 's/[A-Z]/\l&/g' filename
sed在某一行最后添加一个数字
例如在test文件中a开头的行末添加12:
sed 's/\(^a.*\)/\1 12/' test
。
\1
代表前面圆括号的整体,也可以用&代替。
另外补充几个命令:
删除某行到最后一行
sed '/c/{p;:a;N;$!ba;d}' test
定义一个标签a,匹配c,然后N把下一行加到模式空间里,匹配最后一行时,才退出标签循环,然后命令d,把这个模式空间里的内容全部清除。
if 匹配"c"
追加下一行
if 不匹配"$"