1

AとBの2つのテキストファイルがあります。

A:

a start
b stop
c start
e start

B:

b
c

shell(bash ...)コマンドを使用して、Aのどの行がBからの行で開始されていないかを確認するにはどうすればよいですか。この場合、私はこの答えを得たいです:

a start
e start

1行のコマンドを使用してこれを実装できますか?

4

3 に答える 3

3

これは行う必要があります:

sed '/^$/d;s/^/^/' B | grep -vf - A

コマンドは、ファイルからsedすべての空でない行を取得し(コマンドを監視) 、各行の前に(の正規表現のアンカーを取得するために)キャレットを追加し、これをすべてに吐き出します。次に、grepをオプション(シンボルのおかげで、ファイルからすべてのパターンを取得することを意味します)を使用して、ファイルに対して反転マッチングを実行します(オプションのおかげで) 。終わり。/^$/dB^grepstdout-fstdin--vA

于 2012-12-02T17:58:00.667 に答える
1

私はこれがそれをするべきだと思います:

sed 's/^/\^/g' B > C.tmp
grep -vEf C.tmp A
rm C.tmp
于 2012-12-02T17:52:44.053 に答える
0

xargs、、、catおよびの組み合わせを使用してみることができますgrep

各行の最初の文字をFIRSTLETTERLISTに保存します。あなたはいくつかcatsed仕事でこれを行うことができます。

アイデアは、ブラックリストを取得し、それを興味深いファイルと照合することです。

cat file1.txt | xargs grep ^[^[$FIRSTLETTERLIST]]

これはテストされていないので、動作することを保証することはできませんが、正しい方向を示す必要があります。

于 2012-12-02T17:57:09.173 に答える