grep - 如何在 Grep 语句中包含可选空格

标签 grep

我有一些我正在搜索的日志文件,其中包含以下形式的条目

foo($abc) - sometext
foo ($xyz) - moretext
baz($qux) - moartext
我正在寻找使用 grep 将前两行作为匹配项输出,即
foo($abc)
foo ($xyz)
我试过下面的grep语句grep 'foo(\$' log.txt它输出第一个匹配项,但我尝试包含一个可选的空格,但都没有返回:grep 'foo\s?(\$' log.txt我错误地使用了可选空间,但我不确定如何

最佳答案

您正在使用 POSIX BRE 正则表达式和 foo\s?(\$匹配 foo ,一个空格,一个 文字 ? , 文字 (和文字 $ .
您可以使用

grep -E 'foo\s?\(\$' log.txt
在这里,-E使模式 POSIX ERE,因此它现在匹配 foo ,然后是一个可选的空格和一个 ($子串。
看一个在线演示:
s='foo($abc) - sometext
foo ($xyz) - moretext
baz($qux) - moartext'
grep -E 'foo\s?\(\$' <<< "$s"
输出:
foo($abc) - sometext
foo ($xyz) - moretext
您仍然可以使用更通用的语法,例如
grep 'foo[[:space:]]\{0,1\}(\$' log.txt
它是一个 POSIX BRE 正则表达式匹配 foo , 一个或零个空格,然后是 ($子串。

关于grep - 如何在 Grep 语句中包含可选空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66314801/

相关文章:

regex - grep-使用正则表达式打印不包含模式的所有行(不带-v)

greping stdin 和管道到 sed 似乎不起作用

linux - 在 Linux 中无休止的 pgrep 向我发送电子邮件——我该如何阻止它?

unix - 使用 grep 解析另一个命令的输出

linux - 递归搜索grep

linux - 如何从多个文件中获取特定文件结果的行号

git - 如何使 `git grep` 输出看起来像 `ack` 输出?

perl - 使用 grep 和 perl 搜索和替换

bash - 未添加目录或文件时 grep 会做什么

regex - Grep 语法困境