所以,
我需要一个正则表达式来匹配一个不包含几个子串的字符串。我希望正则表达式匹配其中包含/paths
的所有行,除非它们在string1
之前包含string2
或/paths
不匹配:
foo = string1("/paths
string2 + "/paths
string1 = "/paths
"#{string2}/paths
但匹配:
source("/paths
bg : "/paths
由于
答案 0 :(得分:2)
答案 1 :(得分:1)
如果您使用支持前瞻的风格,这将起作用:
^(?:(?!string1|string2|/paths).)*/paths
答案 2 :(得分:0)
您可能希望绕过另一种方法来执行此操作和if / else,即检查字符串中的string1或string2,如果找到它,则不要处理。
if "string1" in string or "string2" in string then
...
else
process
end if
答案 3 :(得分:0)
我使用以下sed命令执行此操作
sed -i -e '/string1\|string2/!s/paths/fix_paths/gI' FILE_NAME
它并没有在我的路径之前完全搜索字符串,但它符合我的意图匹配并适用于我的特定情况。
感谢大家的帮助
答案 4 :(得分:0)
你有一个grep代表你想要的东西而另一个代表-v
代表你不是什么:
$ grep want_string input_file | grep -v unwant_string