diff
a poté grep
pro požadovaný typ úprav.
diff -u A1 A2 | grep -E "^\+"
Podobný přístup jako https://stackoverflow.com/a/15385080/337172, ale doufejme, že je srozumitelnější a snadno vyladitelný:
diff \
--new-line-format="%L" \
--old-line-format="" \
--unchanged-line-format="" \
A1 A2
Většina níže uvedených je zkopírována přímo z odpovědi serveru @TomOnTime zde. Ve spodní části je pokus, který funguje na netříděných souborech, ale příkaz třídí soubory před zadáním rozdílu, takže v mnoha případech to nebude to, co je žádoucí. Pro dobře naformátované rozdíly netříděných souborů mohou být užitečné další odpovědi (díky @Fritz za upozornění):
Zobrazit řádky, které existují pouze v souboru a:(tj. co bylo smazáno z a)
comm -23 a b
Zobrazit řádky, které existují pouze v souboru b:(tj. co bylo přidáno do b)
comm -13 a b
Zobrazit řádky, které existují pouze v jednom nebo druhém souboru:(ale ne v obou)
comm -3 a b | sed 's/^\t//'
(Upozornění:Pokud soubor a
má řádky, které začínají TAB, bude (první TAB) z výstupu odstraněn.)
POZNÁMKA:Aby "komunikace" fungovala správně, musí být oba soubory seřazeny. Pokud ještě nejsou seřazeny, měli byste je seřadit:
sort <a >a.sorted
sort <b >b.sorted
comm -12 a.sorted b.sorted
Pokud jsou soubory extrémně dlouhé, může to být docela zátěž, protože to vyžaduje další kopii a tedy dvakrát tolik místa na disku.
Edit:všimněte si, že příkaz lze napsat stručněji pomocí substituce procesu (díky @phk za komentář):
comm -12 <(sort < a) <(sort < b)
Můžete to zkusit
diff --changed-group-format='%>' --unchanged-group-format='' A1 A2
Možnosti jsou popsány v man diff
:
--GTYPE-group-format=GFMT
format GTYPE input groups with GFMT
a:
LTYPE is 'old', 'new', or 'unchanged'.
GTYPE is LTYPE or 'changed'.
a:
GFMT (only) may contain:
%< lines from FILE1
%> lines from FILE2
[...]