AとBの2つのテキストファイルがあります。
A:
a start
b stop
c start
e start
B:
b
c
shell(bash ...)コマンドを使用して、Aのどの行がBからの行で開始されていないかを確認するにはどうすればよいですか。この場合、私はこの答えを得たいです:
a start
e start
1行のコマンドを使用してこれを実装できますか?
これは行う必要があります:
sed '/^$/d;s/^/^/' B | grep -vf - A
コマンドは、ファイルからsed
すべての空でない行を取得し(コマンドを監視) 、各行の前に(の正規表現のアンカーを取得するために)キャレットを追加し、これをすべてに吐き出します。次に、grepをオプション(シンボルのおかげで、ファイルからすべてのパターンを取得することを意味します)を使用して、ファイルに対して反転マッチングを実行します(オプションのおかげで) 。終わり。/^$/d
B
^
grep
stdout
-f
stdin
-
-v
A
私はこれがそれをするべきだと思います:
sed 's/^/\^/g' B > C.tmp
grep -vEf C.tmp A
rm C.tmp
xargs
、、、cat
およびの組み合わせを使用してみることができますgrep
各行の最初の文字をFIRSTLETTERLISTに保存します。あなたはいくつかcat
とsed
仕事でこれを行うことができます。
アイデアは、ブラックリストを取得し、それを興味深いファイルと照合することです。
cat file1.txt | xargs grep ^[^[$FIRSTLETTERLIST]]
これはテストされていないので、動作することを保証することはできませんが、正しい方向を示す必要があります。