Sed不接受我的正则表达式

时间:2014-12-11 09:32:21

标签: regex unix sed

我有以下sed命令(用空格/空格替换某些内容):

sed "s/.* \[test] \(h\[W/L]-.*\)//g" file.log

但是这给了我一个错误:

sed: -e expression #1, char 29: unknown option to `s'

我犯了错误?

2013-12-04 00:00:39,629 INFO  [test] (h[W/L]-75) <a>
adasdsdads
asdasdsddsaadsdasds
</a>


2013-12-04 00:00:39,629 INFO  [test] (h[W/L]-75) <a>

asdasdsasaasdas


a

asdas
</a>

所需的操作是:

<a>
adasdsdads
asdasdsddsaadsdasds
</a>


<a>

asdasdsasaasdas


a

asdas
</a>

4 个答案:

答案 0 :(得分:3)

你需要逃避正则表达式中的/

sed "s/.* \[test] \(h\[W\/L]-.*\)//g" file.log

否则,它被视为正则表达式的结束。另一种解决方案是使用不同的分隔符,在您的模式中不使用:

sed "s|.* \[test] \(h\[W/L]-.*\)/||g" file.log

如果您尝试匹配字面括号,则不需要在sed中转义。它应该是:

sed "s|.* \[test] (h\[W/L]-.*)||g" file.log

答案 1 :(得分:1)

您可以尝试使用此sed命令。

$ sed 's/.* \[test\] (h\[W\/L\]-.*) *//g' file
<a>
adasdsdads
asdasdsddsaadsdasds
</a>


<a>

asdasdsasaasdas


a

asdas
</a>
最后

<space>*有助于删除最后)括号后面的空格。

答案 2 :(得分:0)

试试这个:

 sed "s/.* \[test] \(h\[W\/L]-.*\)//g" file.log

答案 3 :(得分:0)

sed 's#.* \[test] (h\[W/L]-.*)##' file.log
  • /中的默认s///以外的其他分隔符,#
  • unescape ()用于使用垃圾(与[相反的行为)
  • 不使用g选项,每行只发生一次