如何grep特定的字符串?

Bio*_*441 -1 grep regular-expression

我正在尝试获取与以下模式匹配的字符串:foobar.

grep -e "^foo*bar$"
Run Code Online (Sandbox Code Playgroud)

Hax*_*iel 5

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

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

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

grep '^foo.*bar$' file
Run Code Online (Sandbox Code Playgroud)

例如,考虑这个测试文件:

$ cat testfile
foobar
foo bar
foo 123 bar
123 foo bar
foo bar 123
123 foo bar 123
Run Code Online (Sandbox Code Playgroud)

现在运行grep命令:

$ grep '^foo.*bar$' testfile
foobar
foo bar
foo 123 bar
Run Code Online (Sandbox Code Playgroud)

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

$ grep -e "^foo" -e "bar$" testfile
foobar
foo bar
foo 123 bar
123 foo bar
foo bar 123
Run Code Online (Sandbox Code Playgroud)

这是因为这些-e选项与 OR 操作相结合。除了原始^foo.*bar$结果,您还将获得结果匹配^foo以及结果匹配bar$