En utilisant GNU sed, l'écrasement en écriture est trivial avec l'option '-i
'; En utilisant sed standard, vous devez écrire dans un fichier temporaire, puis le copier sur l'original.
Les autres réponses sont antérieures à l'exigence «lignes vides» dans la question.
sed -i '/third/d;/^[ ]*$/d' my.txt
La première partie de la commande, jusqu'au point-virgule, recherche «troisième» et supprime toute ligne correspondante. La deuxième partie de la commande recherche toute ligne composée de zéro ou plusieurs espaces et les supprime. Si vous souhaitez supprimer des lignes avec des espaces et des tabulations, ajoutez un onglet dans la classe de caractères. Il n'existe pas de méthode pratique pour afficher les onglets dans le langage de balisage SO.
Vous pouvez équivalente à écrire:
sed -i -e '/third/d' -e '/^[ ]*$/d' my.txt
Et pour sed non-GNU, vous utilisez:
sed '/third/d;/^[ ]*$/d' my.txt > x.$$
cp x.$$ my.txt
rm -f x.$$
Cela ne supprimera pas la ligne, il suffit de remplacer « troisième » par la chaîne vide. –
@Sean: En effet; Je suppose que j'ai mal lu la question. –