假设我有一个包含一些ls -l
输出的文件:
waaa- foo.pdf
-bbb- foobar.pdf
-ccc- foobar
waaa- foobar
我只想得到第一行
waaa -foo.pdf
作为最终结果,我正在尝试:
egrep -E "^w" .file | egrep -E "*.pdf"
有什么方法可以将这两种搜索结合起来吗?
答案1
你必须这样写:
egrep "^w.*\.pdf$" filename
- 表示以 开头,
w
后跟任意字符,以 结尾.pdf
。
对于逻辑“或”,您可以使用-e
switch:
egrep -e pattern1 -e pattern2
表示所有带有pattern1
或 的行pattern2
。
或者按照@steeldriver 建议的那样,使用扩展正则表达式“或”:
egrep "(pattern1|pattern2)"
并且如您所知,对于扩展正则表达式,您必须使用egrep
而不是grep
,例如:
egrep '(bbb|ccc)' # works fine for your file
grep '(bbb|ccc)' # doens't have any result
对于“and”,您必须将其通过管道传输到另一个egrep
:
grep pattern1 | grep pattern2
表示所有同时包含pattern1
和 的行pattern2
。
或者使用其他工具,如awk
:
awk '/pattern1/ && /pattern2/` filename