【发布时间】:2024-01-14 02:38:01
【问题描述】:
-F 是grep 的一个选项,来自以下手册:
将模式解释为固定字符串的列表,由 换行符,其中任何一个都将被匹配
我的问题是
- 如何分隔多个固定字符串,换行符是什么,
\n或\? - 如果我想查找以字符
a或h开头的行,grep -F a\nh file似乎无效。
提前致谢!
【问题讨论】:
标签: regex linux grep command-line-interface
-F 是grep 的一个选项,来自以下手册:
将模式解释为固定字符串的列表,由 换行符,其中任何一个都将被匹配
我的问题是
\n或\?a 或h 开头的行,grep -F a\nh file 似乎无效。提前致谢!
【问题讨论】:
标签: regex linux grep command-line-interface
在grep 中,-F 将导致模式在字面上匹配,即不对模式进行正则表达式解释。
\n可以输入多个模式,即换行分隔。
并非所有 shell 默认都将\n 转换为换行符,在这种情况下您可以使用$'a\nh'。
示例:
$ echo $'foo\nf.o\nba.r\nbaar\n'
foo
f.o
ba.r
baar
$ grep -F $'f.o\nba.r' <<<$'foo\nf.o\nba.r\nbaar\n'
f.o
ba.r
【讨论】:
$'...' 的解释方式与 C 字符串相同,但它是 bash 扩展。虽然 bash 不支持在字符串中解释 \n,但 dash 支持。我认为安全的电话是使用tmp_var=$(printf "hello\nworld")
<<<是什么,看来是变成标准输入之后的内容了。
man bash
默认情况下,该模式是基本正则表达式 (BRE) 模式,但对于 -F,它将被解释为没有元字符的文字字符串。
您也可以使用-E,它将启用扩展正则表达式 (ERE)。
% grep -F '..' <<< $'hello\nworld\n...'
...
% grep '..' <<< $'hello\nworld\n...'
hello
world
...
【讨论】: