Bash:sed正则表达式模式不匹配字符串

时间:2015-05-12 13:42:40

标签: regex bash shell sed

我在RegExr.com中测试了这个特殊的正则表达式:

/(\*)*((\s)?(\w)*)/g

匹配以下内容:

* Global Links contained...etc
* Change User, contact list...etc

(从...开始的所有内容只是句子中的额外单词,而不是文字......等等)

我尝试在sed命令中使用这个正则表达式作为bash脚本的一部分,如下所示:

sed "/(\*)*((\s)?(\w)*)/d" test.txt > stripped.txt

但是这两行仍然保留在stripped.txt中。有没有我在正则表达式或文件中没有考虑的东西?在这两行之前是块注释(/ **)的开始,而块注释结束在它们之后(* /),这两行都在新行上。我错过了一些新线条或者sed命令/正则表达式错误吗?

1 个答案:

答案 0 :(得分:3)

默认情况下,您没有考虑sed使用的正则表达方言。这不是有效的BRE(基本正则表达式)。

你需要告诉sed使用ERE(扩展的正则表达式)。

对于GNU sed是-r标志,对于BSD sed是-E标志(尽管-r通常可用作compat标志)。

sed -r "/(\*)*((\s)?(\w)*)/d" test.txt > stripped.txt