如何 grep 查找特定字符串?

如何 grep 查找特定字符串?

我正在尝试获取与以下模式匹配的字符串:以 开头foo并以 结尾bar

grep -e "^foo*bar$"

答案1

您想要匹配的模式分为三个部分:

  • 第一个是以“foo”开始字符串。因此,使用起始锚点:'^foo'。
  • 第二个是以“bar”结束字符串。在这里,使用结束锚点:'bar$'。
  • 第三部分是起始锚点和结束锚点之间的内容。在您的情况下,您希望将所有字符匹配零次或多次(即中间可能有也可能没有字符)。这由表达式“.*”表示。点匹配任何字符,星号量词指定它可以匹配零次或多次。

将所有这些放在一起,您将得到表达式:

grep '^foo.*bar$' file

作为一个例子,考虑这个测试文件:

$ cat testfile
foobar
foo bar
foo 123 bar
123 foo bar
foo bar 123
123 foo bar 123

现在运行grep命令:

$ grep '^foo.*bar$' testfile
foobar
foo bar
foo 123 bar

请注意,您在注释 ( grep -e "^foo" -e "bar$" file) 中指定的变体的行为有所不同:

$ grep -e "^foo" -e "bar$" testfile
foobar
foo bar
foo 123 bar
123 foo bar
foo bar 123

这是因为-e选项是通过 OR 运算组合在一起的。除了原始^foo.*bar$结果之外,您还将获得结果匹配^foo以及结果匹配bar$

相关内容