ファイルが2つあるのに比較したいですa.txt
。b.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 <> pqr
a.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すべての行が空の変更を無視します。