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.txt1から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/grepGNU grep 2.5.1です)。理論的には、-xよりポータブルです。POSIX 1997標準にも含まれていたため、広く利用できるはずです。この-wオプションは、1行に複数の番号がある場合に適しています(ただし、grep行全体が削除されます)。