Acho que isso deve fazer o que você precisa:
diff -r -U0 a/ b/ | awk '/^+++ / {filename=$2; next} /^@@ / {split($3,a,","); line=substr(a[1],2)} /^+/ {text=substr($0,2); print filename ":" line ":" text; line++}'
Basicamente, ele faz um diff recursivo comum e, em seguida, descarta o bit que você não deseja. O awk é legal para coisas assim.
diff -U0
fornece resultados assim:
--- a 2014-07-01 17:05:46.257447351 +0100
+++ b 2014-07-01 17:05:56.157524562 +0100
@@ -2 +2 @@
-my second line
+my changed second line
O script awk pega o nome do arquivo da linha +++
, o número da linha da linha @@
e o texto da linha +
e depois os imprime com os dois-pontos que você queria:
file_2:2:my changed second line
EDIT: notei um erro de script se duas linhas juntas foram editadas. Corrigido agora.