GNUgrep
を使用すると、' fgrep
'モードを使用できます。
grep -F -v -f file1.txt -w file2.txt > file3.txt
デモ:
seq 1 30 > file2.txt
for i in 1 2 3 4 5; do echo $RANDOM; done | sed 's/\(..\).*/\1/' > file1.txt
grep -F -v -f file1.txt -w file2.txt > file3.txt
の内容はfile2.txt
1から30までの数字の行です。の内容file1.txt
は5つの半乱数2桁の数字です。の出力file3.txt
は、ファイル1にないファイル2の行です。ループによって生成される乱数はあまり良くなく、1..30に制限されていないことに注意してください(すぐ下のコメントも参照してください)。
GNUに固有の機能は、単語全体に一致grep
するフラグです。-w
興味深いことに、POSIX 2008は、それ-x
が正確な行と一致する必要があることを指定しており、この-x
オプションは私にとっては正しく機能します(Mac OS X 10.7.5では、/usr/bin/grep
GNU grep 2.5.1です)。理論的には、-x
よりポータブルです。POSIX 1997標準にも含まれていたため、広く利用できるはずです。この-w
オプションは、1行に複数の番号がある場合に適しています(ただし、grep
行全体が削除されます)。