egrep 命令用于查找以一个字符开头且还包含一些字符串的行

sol*_*ish 1 command-line grep

假设我有一个有一些ls -l输出的文件:

waaa- foo.pdf
-bbb- foobar.pdf
-ccc- foobar
waaa- foobar
Run Code Online (Sandbox Code Playgroud)

我只想得到第一行

waaa -foo.pdf
Run Code Online (Sandbox Code Playgroud)

作为最终结果,我正在尝试:

egrep -E "^w" .file | egrep -E "*.pdf"
Run Code Online (Sandbox Code Playgroud)

有没有办法将这两个搜索结合起来?

Rav*_*ina 5

你必须这样写:

egrep "^w.*\.pdf$" filename
Run Code Online (Sandbox Code Playgroud)
  • 表示w以任何字符开头并以.pdf.

对于逻辑“或”,您可以使用-e开关:

egrep -e pattern1 -e pattern2
Run Code Online (Sandbox Code Playgroud)

表示所有带有pattern1或 的行pattern2

或者按照@steeldriver 的建议,使用扩展的正则表达式“或”:

egrep "(pattern1|pattern2)"
Run Code Online (Sandbox Code Playgroud)

正如您所知,对于扩展正则表达式,您必须使用egrep而不是grep,例如:

egrep '(bbb|ccc)' # works fine for your file
grep '(bbb|ccc)' # doens't have any result
Run Code Online (Sandbox Code Playgroud)

对于“和”,您必须将其通过管道传输到另一个egrep

grep pattern1 | grep pattern2
Run Code Online (Sandbox Code Playgroud)

表示所有带有pattern1和 的行pattern2

或使用其他工具,如awk

awk '/pattern1/ && /pattern2/` filename
Run Code Online (Sandbox Code Playgroud)