Sed ajout d'un caractère en fin de ligne
Résolu
vieurou
Messages postés
73
Date d'inscription
Statut
Membre
Dernière intervention
-
Lordanonymous Messages postés 198 Date d'inscription Statut Membre Dernière intervention -
Lordanonymous Messages postés 198 Date d'inscription Statut Membre Dernière intervention -
bonjour,
Je voudrais avec sed pouvoir ajouter un caractère en fin de ligne, mais uniquement si cette ligne ne commence pas par un #, ni par espace #, ni par tabulation #.
Sur les lignes traitées, je voudrais rajouter un caractère en fin de ligne, mais si cette ligne contient un #, je voudrais que ce caractère soit placé non plus en fin de ligne mais avant le dièse.
Par exemple , je voudrais que le fichier contenant le texte :
devienne :
merci de votre aide
Je voudrais avec sed pouvoir ajouter un caractère en fin de ligne, mais uniquement si cette ligne ne commence pas par un #, ni par espace #, ni par tabulation #.
Sur les lignes traitées, je voudrais rajouter un caractère en fin de ligne, mais si cette ligne contient un #, je voudrais que ce caractère soit placé non plus en fin de ligne mais avant le dièse.
Par exemple , je voudrais que le fichier contenant le texte :
#code commenté
#code commenté
code non commenté
code non commenté #commentaire
devienne :
#code commenté
#code commenté
code non commenté(un caractère en plus ici)
code non commenté(un caractère en plus ici) #commentaire
merci de votre aide
A voir également:
- Sed ajouter un caractère en fin de ligne
- Partage de photos en ligne - Guide
- Caractère ascii - Guide
- Caractère spéciaux - Guide
- Caractere speciaux - Guide
- Mètre en ligne - Guide
9 réponses
-e
Permet d'enchainer plusieurs commandes
/^[ ]*#\|#\|^$/!
Recherche toutes les lignes ne commençants pas "^" par un dièse, précédé ou non d'un espace "[ ]*", ou "\|" (on protège le "pipe" par un antislash pour qu'il ne soit pas interprété littéralement) contenant un dièse, ou "\|^$" les lignes vides. Le point d'exclamation final permettant d'exprimer la négation
s/.*/&A/'
On substitue alors toute la ligne ".*" par elle même "&" suivie d'un "A"
-e '/^[ ]*#/!
Nouvelle commande, toutes lignes ne commençant pas par un dièse, précédé ou non d'un espace
s/[ ]*#/A&/'
Substituer le motif constituer d'un ou plusieurs espace(s) suivi(s) d'un dièse par un A et le motif lui même (&)
;-))
Permet d'enchainer plusieurs commandes
/^[ ]*#\|#\|^$/!
Recherche toutes les lignes ne commençants pas "^" par un dièse, précédé ou non d'un espace "[ ]*", ou "\|" (on protège le "pipe" par un antislash pour qu'il ne soit pas interprété littéralement) contenant un dièse, ou "\|^$" les lignes vides. Le point d'exclamation final permettant d'exprimer la négation
s/.*/&A/'
On substitue alors toute la ligne ".*" par elle même "&" suivie d'un "A"
-e '/^[ ]*#/!
Nouvelle commande, toutes lignes ne commençant pas par un dièse, précédé ou non d'un espace
s/[ ]*#/A&/'
Substituer le motif constituer d'un ou plusieurs espace(s) suivi(s) d'un dièse par un A et le motif lui même (&)
;-))
Lordanonymous
Messages postés
198
Date d'inscription
Statut
Membre
Dernière intervention
143
Merci, juste ce qu'il me fallait.
je sais pas trop pourquoi mais sed -e '/^[ ]*#\|#\|^$/! s/.*/&;/' me fait un retour a la ligne avant de me mettre mon point virgule, ça doit etre parceque mon fichier et un fichier dos mais coment resoudre cela?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
et dans s/[ ]*#/;&/' si je veut aussi qu'il me suprime les tabulation j'atoute \t\+ comme cela?
apres test, ça marche pas
s/[ ]*\t\+#/;&/'
apres test, ça marche pas
eh bien le souci c'est que la premiere commande de mon script est
sed -i -e 's/^M$//' $filequi normalement me le met en format unix, nan?
s/[ ]*\t*#/;\t\t&/ fonctionne
Salut,
jp@MDK:~/tmpfs ssh$ cat fichier Bonjour, Et si on veut juste commenter par un # une ligne contenant une chaîne donnée ? Merci d'avance. jp@MDK:~/tmpfs ssh$ sed '/commenter/ s/.*/#&/' fichier Bonjour, #Et si on veut juste commenter par un # une ligne contenant une chaîne donnée ? Merci d'avance. jp@MDK:~/tmpfs ssh$;-))
Je comprends pas; chez moi ça marche bien :
[tmpfs]$ cat test.txt un deux trois cent-deux vingt-deux cinq six deux [tmpfs]$ ch=deux [tmpfs]$ echo "$ch" deux [tmpfs]$ sed "/$ch/ s/.*/#&/" test.txt un #deux trois #cent-deux #vingt-deux cinq #six deux [tmpfs]$ sed '/'"$ch"'/ s/.*/#&/' test.txt un #deux trois #cent-deux #vingt-deux cinq #six deux [tmpfs]$;-\