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