vieyahn2017 / shellv

shell command test and study
4 stars 1 forks source link

10.9 sed正则表达式匹配,各种括号的转义和不转义 #72

Open vieyahn2017 opened 3 years ago

vieyahn2017 commented 3 years ago

sed正则表达式匹配,各种括号的转义和不转义

https://blog.csdn.net/zl87758539/article/details/77481679

vieyahn2017 commented 3 years ago

[ ] 需要匹配的时候,需要转义(这个是叛徒)

  echo "[ ]"|sed 's/\[.*\]/aaa/g'

( ) 需要匹配的时候,不要转义

  $echo "( )"|sed 's/( )/c/g'

{ } 需要匹配的时候,不要转义

  $echo "{ }"|sed 's/{ }/c/g'
vieyahn2017 commented 3 years ago

当需要匹配数字,字母等使用中括号时候: 不要转义 但使用大括号作为特殊字符时候,需要转义。

  $echo "333"|sed 's/[0-9]\{3\}/ccc/g'
vieyahn2017 commented 3 years ago

当需要适配符,需要使用\1来替换正则表达式的对应参数时:

不能写(regrexxxx)

要写(regrexxxx)

  $echo "{1234567}"|sed 's/{\([0-9]*\)}/\1/g'
vieyahn2017 commented 3 years ago

与此对应的还有 +和*

在做为特别字符时候+必须转义为

\+

才有效, 而*则不需要。

举个例子:

echo "ccc"| sed 's/c/aaa/g'#正确 echo "ccc"| sed 's/c\/aaa/g'#错误 echo "ccc"| sed 's/c+/aaa/g'#错误 echo "ccc"| sed 's/c+/aaa/g'#正确