这里有一些我需要匹配的字符串(不是行!)。 (点代表不匹配的其他字符串。)
... ThisIsAString ...
... AnotherString ...
以下是我需要避免的一些字符串:
... [TEST:ThisIsAString] ...
... TEST:AnotherString ...
这是我现在拥有的正则表达式:
(?<!TEST:)[a-zA-Z]{5,}(?!\])
愚蠢的部分是,当我不想让它们匹配时,它会匹配第一个像
hisIsAStrin
和第二个像notherString
。
我错过了什么?
这将与
grep
和 sed
一起使用,以用修改后的版本替换字符串。 (我不能只使用sed
。)
这可能对你有用(GNU sed):
sed -E 's/(TEST: ?)(ThisIsAString|AnotherString) /\1\n\2/
s/ (ThisIsAString|AnotherString) /X&X/;s/\n//' file
技巧是引入一些脚手架并使用它来匹配或不匹配所需的字符串,然后在打印该行之前将其删除。
由于 sed 通常每次读入一行,换行符永远不会出现,因此它可以用作分隔符并再次安全地删除,而不会影响原始行。
注意不需要将 grep 与 sed 一起使用,因为 sed 的功能足够强大,可以完成这两项工作。然而 sed 并没有采用 Perl 等可以使用的所有现代正则表达式,并且可能不是最容易使用的工具。