次のような単語(1行に1つ)を含むファイルがあります
犬
魚
ネコ
靴
次のようなCSV形式のセカンダリファイルがあります
1、靴、赤
2、アップル、ブラック
3、fog、blue
最初のファイルを検索パターンとしてgrepを使用したいのですが、2番目のファイルの行に最初のファイルのWordが含まれている場合、2番目のファイルの行を完全に削除したいと思います。
Grepがこれを実行する方法でさえあるかどうかはわかりません。
編集:bashスクリプト
これは、grep
の-f
オプションを使用して行うことができます(これは、-f
ではなく小文字の-F
です)。
% echo -e 'Dog\nFish\nCat\nShoes' > ./file1.txt
% echo -e '1,shoes,red\n2,Apple,black\n3,fog,blue' > ./file2.csv
# Grab all lines from the CSV that match a pattern from file1:
% grep -if ./file1.txt ./file2.csv
1,shoes,red
# Grab all lines from the CSV that DON'T match a pattern from file1:
% grep -vif ./file1.txt ./file2.csv
2,Apple,black
3,fog,blue
詳細な説明:
grep
—自明-v
—「入力パターンに一致しない戻り行」を意味します-i
—「ユースケースに依存しないマッチング」を意味します(最初のファイルには大文字が含まれ、CSVには含まれていなかったため)-f
— '指定されたファイル(file1.txt
)の各行をマッチングに使用するパターンとして解釈する'を意味します必要な結果とファイルの内容によっては、-F
および-w
オプションを読み取ることもできます。
ファイルをインプレースで編集する必要がある場合は、sed
の-f
オプションを使用して編集できると思いますが、sed
は、ファイルの各行をコマンドとしてではなくコマンドとして解釈します。 grep
のような単純なパターンが行います。