2つのファイルがあります(空白行/スペース/タブなし)。
/tmp/すべて
aa
bb
cc
hello
SearchText.json
xyz.txt
/tmp/必須
SearchText.json
私が望む最終出力は次のとおりです。 (/tmp/allのすべての一般的な行)
aa
bb
cc
hello
xyz.txt
私は次のコマンドを試しました: -
# comm -23 /tmp/required /tmp/all
SearchText.json
# comm -23 /tmp/all /tmp/required
aa
bb
cc
hello
SearchText.json
xyz.txt
# comm -13 /tmp/all /tmp/required
SearchText.json
# comm -13 /tmp/required /tmp/all
aa
bb
cc
hello
SearchText.json
xyz.txt
# grep -vf /tmp/all /tmp/required
# grep -vf /tmp/required /tmp/all
aa
bb
cc
hello
SearchText.json
xyz.txt
# comm -23 <(sort /tmp/all) <(sort /tmp/required)
aa
bb
cc
hello
SearchText.json
xyz.txt
答え1
代わりに、次の点をcomm
考慮してください。grep
:
grep -vxFf /tmp/required /tmp/all
これを行うには、()行が()ファイルに存在してはいけません/tmp/all
。どの行も正規表現として解釈されないように「固定文字列」フラグを追加しました。また、入力行全体が の行に一致するように強制するために、そのオプションを使用します。-v
-f
/tmp/required
/tmp/all
-F
/tmp/all
/tmp/required
-x
この方法ではソートされた入力は必要ありません。
comm -23 <(sort ...) <(sort ...)
"SearchText.json"行が一致すると、コマンドは機能しないようです。正確に両方のファイルに含まれます(末尾のスペースがある場合は同じ数)。