我有一个包含以下 3 行的文件:
文件.txt
aaa|
bbb|
ccc|
另一个文件包含一行:
正则表达式.txt
^aaa\|
$grep ^aaa\| file.txt
产量:
aaa|
$grep -f regex.txt file.txt
产量:
aaa|
bbb|
ccc|
为什么grep -f
和 的结果不同grep
?
$grep -V
grep (GNU grep) 3.1
$lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.1 LTS
Release: 18.04
Codename: bionic
答案1
您正在使用 grep基本正则表达式。grep ^aaa\| file.txt
与打字相同grep "^aaa|" file.txt
。读取文件时grep -f regex.txt file.txt
与 . 相同grep "^aaa\|" file.txt
,转义|
意味着匹配^aaa
或""
匹配任何内容。
答案2
在文件中使用正则表达式时,不需要\
(转义)。在文件中时,它被视为\
字符。在命令中,它被视为转义并被忽略(由于缺少表达式的引用)。