0

私の問題の一部はこの答えで解決されました: Threadlink 、しかし私の問題の重要な部分は未解決でした!

使用後

diff a.csv b.csv | grep -E -A1 '^[0-9]+d[0-9]+$' | grep -v '^--$' | sed -n '0~2 p' | sed -re 's,^< (.*)$,\1,g'

何度か私は何かが残っているのを見つけました。複数の次の行が削除されることがあります。1行だけが削除された場合、次のようなものが見つかりました。

3663d3661

マルチブルラインの場合は次のとおりです。

3724,3725d3718

だから私はdiff呼び出しを次のように変更しました:

diff a.csv b.csv | grep -E -A1 '^[0-9]+\,*[0-9]*d[0-9]+$' | grep -v '^--$' | sed -n '0~2 p' | sed -re 's,^< (.*)$,\1,g'

これは、削除された複数の行の最初の行に対して機能します。

私の質問は次のとおりです:そのような場合、どうすればすべての削除された行(おそらく次の5行)を取得できますか?diff通話中に何を変更する必要がありましたか?

4

1 に答える 1

0
diff a.csv b.csv | sed -n '/^[0-9]\+d[0-9]*/,/^[0-9]\+[^d]*$/{/^[0-9]\+/d;s/^< //;p}'

それをします。

/^[0-9]\+d[0-9]*/,/^[0-9]\+[^d]*$/

削除された文字列範囲を検索します

/^[0-9]\+/d

すべて削除します6842d6844,6772

s/^< //

<行頭のすべてを置き換えます

行をp印刷します。

于 2012-07-11T09:53:34.380 に答える