我正在寻找一个 grep 表达式,它可以让我检查标点符号之前是否有空格或行首;我想确保标点符号的使用始终如一。我所拥有的是这个(为简单起见,我在示例中[\.,;:\!?]
仅替换为 a ,
):
~ > echo -e "some, text\nsome ,text\n,some text" | grep " ,"
2:some ,text
没关系,但错过了第三种情况。我试过了[^ ],
,"(^\| ),"
但都不管用。这里的正确表达是什么?
这应该有效:
echo -e "some, text\nsome ,text\n,some text" | grep -P "( |^),"
-P
将其解释为类似 Perl 的正则表达式,可防止不必要的字符转义。
这是可行的。我认为您不能假设 -P 选项可用(它不在默认的 OSX grep 中)。但是 grep -E 也可以让您避免转义:
echo -e "some, text\nsome ,text\n,some text" | grep -E "( |^),"
尝试使用以下perl
风格进行积极的后向断言regex
:
echo -e "some, text\nsome ,text\n,some text" | grep -P '(?<=\s|^),'
这会产生:
some ,text
,some text