0

我正在寻找一个 grep 表达式,它可以让我检查标点符号之前是否有空格或行首;我想确保标点符号的使用始终如一。我所拥有的是这个(为简单起见,我在示例中[\.,;:\!?]仅替换为 a ,):

~ > echo -e "some, text\nsome ,text\n,some text" | grep " ,"
2:some ,text

没关系,但错过了第三种情况。我试过了[^ ],"(^\| ),"但都不管用。这里的正确表达是什么?

4

3 回答 3

1

这应该有效: echo -e "some, text\nsome ,text\n,some text" | grep -P "( |^),"

-P将其解释为类似 Perl 的正则表达式,可防止不必要的字符转义。

于 2013-10-20T15:01:35.593 回答
1

这是可行的。我认为您不能假设 -P 选项可用(它不在默认的 OSX grep 中)。但是 grep -E 也可以让您避免转义:

echo -e "some, text\nsome ,text\n,some text" | grep -E "( |^),"
于 2013-10-20T15:08:15.117 回答
0

尝试使用以下perl风格进行积极的后向断言regex

echo -e "some, text\nsome ,text\n,some text" | grep -P '(?<=\s|^),'

这会产生:

some ,text
,some text
于 2013-10-20T14:57:10.853 回答