我正在尝试找出如何使用:
grep -i
在另一个命令上使用 grep 后,使用多个字符串。例如:
last | grep -i abc
last | grep -i uyx
我希望将上述内容合并为一个命令,但是在互联网上搜索时,我只能找到有关如何在 grep 中使用多个字符串的参考,当 grep 与文件而不是命令一起使用时。我尝试过这样的事情:
last | grep -i (abc|uyx)
或者
last | grep -i 'abc|uyx'
但这是行不通的。获得我期望的结果的正确语法是什么?
提前致谢。
答案1
许多选项grep
单独使用,从标准选项开始:
grep -i -e abc -e uyx
grep -i 'abc
uyx'
grep -i -E 'abc|uyx'
通过一些grep
实现,您还可以执行以下操作:
grep -i -P 'abc|uyx' # perl-like regexps, sometimes also with
# --perl-regexp or -X perl
grep -i -X 'abc|uyx' # augmented regexps (with ast-open grep) also with
# --augmented-regexp
grep -i -K 'abc|uyx' # ksh regexps (with ast-open grep) also with
# --ksh-regexp
grep -i 'abc\|uyx' # with the \| extension to basic regexps supported by
# some grep implementations. BREs are the
# default but with some grep implementations, you
# can make it explicit with -G, --basic-regexp or
# -X basic
您可以(...)
在周围添加 s abc|uyx
(\(...\)
对于 BRE),但这不是必需的。 s(
和)
s 等|
也需要加引号才能按字面传递,grep
因为它们是 shell 语言语法中的特殊字符。
不区分大小写的匹配也可以作为正则表达式语法的一部分启用,并具有某些grep
实现(非标准)。
grep -P '(?i)abc|uyx' # wherever -P / --perl-regexp / -X perl is supported
grep -K '~(i)abc|uyx' # ast-open grep only
grep -E '(?i)abc|uyx' # ast-open grep only
grep '\(?i\)abc|uyx' # ast-open grep only which makes it non-POSIX-compliant
与标准-i
选项相比,这些并没有真正带来太多优势。例如,如果您希望abc
匹配区分大小写而不是区分大小写,则可能会更有趣uyx
,您可以这样做:
grep -P 'abc|(?i)uyx'
或者:
grep -P 'abc|(?i:uyx)'
(以及其他正则表达式语法的等效变体)。
其等效标准如下所示:
grep -e abc -e '[uU][yY][xX]'
(请记住,不区分大小写的匹配通常取决于区域设置;例如,大写是否i
或I
可能İ
取决于区域设置grep -i i
)。
答案2
grep 'abc\|uyx'
egrep 'abc|uyx'