grepとgrep -fの違い

grepとgrep -fの違い

次の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

ファイルで正規表現を使用する場合\(エスケープ)は必要ありません。ファイルでは\文字として扱われます。コマンドはエスケープされ、無視されます(表現式への参照が欠落しているため)。

関連情報