我正在尝试获取与以下模式匹配的字符串:以 开头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$
。