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