我想通过每行编写 1 个模式来提高脚本的可读性。
是否有一种语法可以让我转换grep 'foo\|bar\|barz'为以下内容?
grep 'foo\|
bar\|
barz'
Run Code Online (Sandbox Code Playgroud)
Gil*_*il' 12
模式参数实际上是一个模式列表,由换行符分隔。这甚至适用于grep -F:您可以搜索多个字符串。所以你可以写:
grep 'foo
bar
barz'
Run Code Online (Sandbox Code Playgroud)
但请注意,连续行不能缩进:任何前导空格都将成为模式的一部分。出于这个原因,您可能更喜欢将模式列表作为单独的参数传递,并-e在每个模式的前面。然后,您可以\在行尾使用命令参数之间的行拆分 shellgrep命令。这两种语法是等价的。
grep -e 'foo' \
-e 'bar' \
-e 'barz'
Run Code Online (Sandbox Code Playgroud)
请注意,grep当传递-P选项(用于 PCRE 正则表达式)时,这些选项都不适用于当前版本的 GNU ,在这些情况下,该选项会以grep: the -P option only supports a single pattern. 但是,您可以使用pcregrep代替 GNUgrep -P并使用该x标志来输入多行正则表达式:
pcregrep '(?x)
foo |
bar |
barz'
Run Code Online (Sandbox Code Playgroud)
使用(?x),包括 SPC 和 NL 在内的所有空白字符都将被忽略,允许您根据需要缩进代码。
mur*_*uru 11
我认为没有必要在|那里。您可以使用-e跨行分布的多个选项:
grep -e foo \
-e bar \
-e barz
Run Code Online (Sandbox Code Playgroud)