1 votes

Sed supprime les lignes, mais laisse des espaces blancs ?

J'ai des difficultés avec ce code. Il supprime les lignes correspondant à la date (dans mon cas, 09/05/17), ce qui est très bien. Mais à la place, il n'y a que des lignes vides.

Quelqu'un a-t-il une solution ?

sed -i -e "s|$PrevDay.*$||" $DataFile2

0voto

simlev Points 3517

Je développe mon commentaire précédent en y apportant une réponse.

sed -i -e "\|$PrevDay.*$|d" $DataFile2

Explication : Vous utilisez une fonction qui remplace le texte à chaque ligne. Vous avez choisi l'option | comme délimiteur, écrit l'expression à supprimer entre le premier et le deuxième délimiteur et l'expression à insérer entre le deuxième et le troisième délimiteur. Ainsi, la ligne est modifiée mais pas supprimée.

Si vous souhaitez supprimer la ligne, vous devez utiliser une syntaxe différente :

\| définit | comme délimiteur au lieu de la valeur par défaut /

$PrevDay.*$ est le motif à rechercher, où $PrevDay est une variable de votre script bash

| marque la fin du modèle de recherche

d signifie que la ligne correspondant au motif doit être supprimée

Voir este question similaire sur Stackoverflow.

Comme c'est souvent le cas dans le monde UNIX, le même résultat peut être obtenu d'une autre manière, en utilisant par exemple awk ; l'expression suivante signifie : "si le motif ne correspond pas, imprimer toute la ligne".

awk -i '!/$PrevDay.*$/ {print $0}' $DataFile2

-1voto

H.W. Wyes Points 21

Essayez-le : sed -i -e "s|$PrevDay.*$||" $DataFile2 | grep -v '^$'

Si votre ligne d'entrée n'est pas vide mais contient des caractères d'espacement, vous pouvez utiliser

sed -i -e "s|$PrevDay.*$||" $DataFile2 | grep -v '^[[:blank:]]*$'

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X