我正在尝试使用以下命令替换文件中两个字符串之间的字符串。文件中可能有任意数量的此类模式。这只是一个例子。
sed 's/word1.*word2/word1/' 1.txt
在我正在测试的示例源文件中,有两个实例出现“word1”后跟“word2”。1.txt 文件的内容
word1---sjdkkdkjdk---word2 I want this text----word1---jhfnkfnsjkdnf----word2 I need this also
结果如下。
word1 I need this also
预期输出:
word1 I want this text----word1 I need this also
有人可以帮我吗?
我查看了其他堆栈溢出问卷,但他们讨论了仅替换模式的一个实例。
正则表达式是贪婪的——它们匹配最长的字符串,所以从第一个“word1”到最后一个“word2”。不确定是否有任何版本的 sed 支持非贪婪的正则表达式……不过,您可以只使用 perl,它可以:
perl -pe 's/word1.*?word2/word1/g' 1.txt
应该做的伎俩。这?
将先验的含义*
从“只要模式的其余部分匹配就尽可能多地匹配”更改为“只要模式的其余部分匹配就尽可能少地匹配”。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句