我有以下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>
答案 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///
以外的其他分隔符,#
()
用于使用垃圾(与[
相反的行为)g
选项,每行只发生一次