bash は両方のファイルの共通行を削除します。

bash は両方のファイルの共通行を削除します。

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"行が一致すると、コマンドは機能しないようです。正確に両方のファイルに含まれます(末尾のスペースがある場合は同じ数)。

関連情報