sed: Ajoutez une nouvelle ligne à chaque file qui n'en possède pas à la fin du file

Je me fais incontestablement

avertissement: aucune nouvelle ligne à la fin du file

À partir d'un code qui a été modifié pour la dernière fois dans Windows.

Dans Linux, comment puis-je réparer tous ces files cpp / h et append une nouvelle ligne à la fin de chaque file qui n'a pas de nouvelle ligne?

J'ai essayé d'utiliser sed:

find . \( -name "*.cpp" -o -name "*.h" -o -name "*.hpp" \) -print | xargs sed -i -e "$G" 

Mais je n'ai pas encore travaillé.

En l'absence de dos2unix – ce serait la manière idéale, essayez:

 find . \( -name "*.cpp" -o -name "*.h" -o -name "*.hpp" \) -print0 | xargs -0 -iFILE sh -c 'echo >> FILE' 

ou

 find . -type f \( -name "*.cpp" -o -name "*.h" -o -name "*.hpp" \) -exec sh -c 'echo >> {}' \; 

Notez que la redirection est toujours un problème – le rlocation ne se produit pas comme vous le souhaitez sans lancer un nouveau shell.

Puisque votre question portait sur 'sed', vous pouvez également le faire comme suit:

 find . \( -name "*.cpp" -o -name "*.h" -o -name "*.hpp" \) -print0 | xargs -0 sed -i -e '$a\ \' 

(C'est un nouveau caractère de ligne littéral – pas un \ n ou autre chose – probablement mieux fait en copiant et coller – car il pourrait être assez difficile à saisir :).

 find . \( -name "*.cpp" -o -name "*.h" -o -name "*.hpp" \) -print | xargs dos2unix {}