Grep - ^(\s*$) 与 ^\s*$

Grep - ^(\s*$) 与 ^\s*$

我想搜索一个只有空格的字段。计数时,这两个命令给了我不同的结果:

grep "^\s*$" -E -c
grep "^(\s*$)" -E -c

另一件事。 “仅空格或其他内容”的正确说法是什么:

grep "^(\s*$|STRING)" -E -c

或者

grep "(^\s*$|^STRING)" -E -c

或者说它们是等价的?

答案1

Plaingrep不理解\s或括号。(*)grep -P如果可用,您想要或grep -E/egrep并写出\s[ ^I](其中^ITabgrep没有-P也不理解\t)。此外,使用双引号,某些 shell 将处理\s并仅留下s;您应该始终在 shell 中对正则表达式使用单引号,除非您实际需要插入变量(例如'^\s*'"$foo"'\s+\(',在中间参数中切换引用)。

第二个示例中的替代方案(同样,使用-P单引号而不是双引号)执行相同的操作。前者在技术上更好,因为grep不会回溯那么多,但实际上并不重要。

(*) 迂腐:反斜杠括号可以工作,同样需要单引号,这样 shell 就不会吃掉反斜杠。 egrep通常更容易。

相关内容