diffが期待どおりに機能しません。

diffが期待どおりに機能しません。

ファイルが2つあるのに比較したいですa.txtb.txt

a.txt含む:

abc
jkl < jkl
mno > mno
pqr <> pqr

b.txt含む:

abc
jkl < jkl
mno > mno
pqr <> pqrs
stu

私はこのスクリプトを使用しています:

$ diff a.txt b.txt | grep "> " | cut -c3- > c.txt

結果c.txt:

pqr <> pqr
pqr <> pqrs
stu

なぜpqr <> pqr結果に含まれますか?この問題をどのように解決できますか?

答え1

@StephaneChazelasが指摘したように、正規表現を固定することを忘れた"> "ので>pqr <> pqra.txt

しかし、フィルタに.NETで新しく追加された行または変更された行のみを表示させたいと思いますb.txt。 GNU diffを使用している場合は、これを直接実行するためのいくつかのオプションがあります。

$ diff --old-line-format '' --unchanged-line-format '' --new-line-format '%L' a.txt b.txt 
pqr <> pqrs
stu

--old-line-format ''にないすべての行を削除し、b.txt両方の--unchanged-line-format ''ファイルに共通のすべての行を削除し、--new-line-format '%L'にある新しい行または変更された行の行の内容のみを表示しますb.txt。リードが>抑制されました。

答え2

@StephaneChazelasがコメントで述べたように、これはSSHとは関係がないようです。すべてをローカルで実行すると、主に次のような結果が得られます。

$ diff a.txt b.txt | grep "> " | cut -c3-
pqr <> pqr
pqr <> pqrs
stu

このdiffコマンドは異なる行を認識し、その行は両方のファイルpqr <> pqrsで一意です。役に立つ場合は、並列比較を使用してどの行がソートされているかを確認できます。

$ diff -y a.txt b.txt
abc                                                             abc
jkl < jkl                                                       jkl < jkl
mno > mno                                                       mno > mno
pqr <> pqr                                                    | pqr <> pqrs
                                                              > stu

似ているが同じではない行は表示されます|。唯一の行には、「>ファイル#2にのみ存在する場合」または「<ファイル#1にのみ含まれている場合」というラベルが付けられています。同じ線にはそのようなマークは表示されません。

答え3

たぶん余分な空白があるかもしれません。

努力する

diff -w -B file1.txt file2.txt

-w はすべてのスペースを無視します。

-Bすべての行が空の変更を無視します。

関連情報