扩展的元字符:+ ? | () {n,m};除这些外的其余字符就不须要进行转义了!spa
[]的通常用法是做为范围选择,例如code
[root@castiel-Lu ~]# cat test a1234 b12345 a2341a A123 A4521a # []内的字符多选一,这里用于忽略大小写 [root@castiel-Lu ~]# sed -n '/^[aA].*$/p' 2.txt a1234 a2341a A123 A4521a
可是当[]字符实际有意义时,就须要进行转义字符串
# 举个例子 []是内容的一部分,至关于字符 [root@castiel-Lu ~]# cat test ert fff ** [abcfd] 123 324 444 [rty] ** fgfg # 如何匹配[abcfd]行到[rty]行之间的内容 [root@castiel-Lu ~]# sed -n '/\[abcfg\]/,/\[rty\]/'p test [abcfd] 123 324 444 [rty]
咱们能够使用sed来实现tr命令转换大小写的效果ast
例如test
[root@castiel-Lu ~]# cat 1.txt aBcDeFgHiJkLmn
[root@castiel-Lu ~]# sed 's/\b[a-z]/\u&/g' 1.txt ABcDeFgHiJkLmn
[root@castiel-Lu ~]# sed 's/[a-z]/\u&/g' 1.txt ABCDEFGHIJKLMN
[root@castiel-Lu ~]# sed 's/[A-Z]/\l&/g' 1.txt abcdefghijklmn
[root@castiel-Lu ~]# cat 2.txt a1234 b12345 a2341a A123 A4521a
# 在a开头的行后追加“_test” [root@castiel-Lu ~]# sed -r 's/(^a.*$)/\1_test/' 2.txt a1234_test b12345 a2341a_test A123 A4521a
思路:先肯定范围,在搜索特定字符创,最后打印便可awk
# 以此为例 [root@castiel-Lu ~]# cat 2.txt a1234_test b12345 a2341a_test A123 A4521a # 打印1-3行内包含字符串123的行 [root@castiel-Lu ~]# sed -n '1,3{/123/p}' 2.txt a1234 b12345
这里涉及到了sed的模式空间概念扩展
[root@test200 ~]# cat test a b c d e f [root@test200 ~]# sed '/c/{p;:a;N;$!ba;d}' test a b c
说明:定义一个标签a
,匹配c
,而后N
把下一行加到模式空间里,匹配最后一行时,才退出标签循环,而后命令d
,把这个模式空间里的内容所有清除。sed
if 匹配"c" :a 追加下一行 if 不匹配"$" goto a 最后退出循环,d命令删除。搜索
关于sed模式空间等更多详细介绍,能够查看《sed与awk》一书。循环