Sed ajout d'un caractère en fin de ligne
Résolu/Fermé
vieurou
Lordanonymous
- Messages postés
- 73
- Date d'inscription
- jeudi 13 septembre 2007
- Statut
- Membre
- Dernière intervention
- 19 décembre 2007
Lordanonymous
- Messages postés
- 198
- Date d'inscription
- jeudi 2 août 2012
- Statut
- Membre
- Dernière intervention
- 21 mars 2019
A voir également:
- Sed ajouter une ligne
- Sed ajouter caractère fin de ligne - Meilleures réponses
- Sed ajouter un caractère en fin de ligne - Meilleures réponses
- Sed ajout d'un caractère en fin de ligne ✓ - Forum - Linux / Unix
- Sed ajouter un caractère en fin de ligne ✓ - Forum - Linux / Unix
- Notepad++ ajouter un caractère en fin de ligne ✓ - Forum - Logiciels
- Ajouter des caractères en début et en fin de ligne ✓ - Forum - Shell
- Ajout de caractère en fin de ligne - Forum - Shell
9 réponses
jipicy
14 sept. 2007 à 11:31
- Messages postés
- 40805
- Date d'inscription
- jeudi 28 août 2003
- Statut
- Modérateur
- Dernière intervention
- 10 août 2020
14 sept. 2007 à 11:31
-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 (&)
;-))
jipicy
14 sept. 2007 à 10:52
- Messages postés
- 40805
- Date d'inscription
- jeudi 28 août 2003
- Statut
- Modérateur
- Dernière intervention
- 10 août 2020
14 sept. 2007 à 10:52
Re-
sed -e '/^[ ]*#\|#\|^$/! s/.*/&A/' -e '/^[ ]*#/! s/[ ]*#/A&/' fichier;-))
vieurou
14 sept. 2007 à 11:09
- Messages postés
- 73
- Date d'inscription
- jeudi 13 septembre 2007
- Statut
- Membre
- Dernière intervention
- 19 décembre 2007
14 sept. 2007 à 11:09
encore merci
serait'il possible que tu me décortique cette commande que je puisse la comprendre stp
serait'il possible que tu me décortique cette commande que je puisse la comprendre stp
vieurou
14 sept. 2007 à 14:32
- Messages postés
- 73
- Date d'inscription
- jeudi 13 septembre 2007
- Statut
- Membre
- Dernière intervention
- 19 décembre 2007
14 sept. 2007 à 14:32
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?
jipicy
14 sept. 2007 à 14:47
- Messages postés
- 40805
- Date d'inscription
- jeudi 28 août 2003
- Statut
- Modérateur
- Dernière intervention
- 10 août 2020
14 sept. 2007 à 14:47
Oui c'est effectivement la cause, je viens de tester.
La solution est dans la conversion au format Unix, soit avec un utilitaire comme "dos2unix" soit avec la méthode donnée plus haut avec "sed".
La solution est dans la conversion au format Unix, soit avec un utilitaire comme "dos2unix" soit avec la méthode donnée plus haut avec "sed".
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
vieurou
14 sept. 2007 à 14:43
- Messages postés
- 73
- Date d'inscription
- jeudi 13 septembre 2007
- Statut
- Membre
- Dernière intervention
- 19 décembre 2007
14 sept. 2007 à 14:43
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
vieurou
14 sept. 2007 à 14:52
- Messages postés
- 73
- Date d'inscription
- jeudi 13 septembre 2007
- Statut
- Membre
- Dernière intervention
- 19 décembre 2007
14 sept. 2007 à 14:52
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?
vieurou
14 sept. 2007 à 15:21
- Messages postés
- 73
- Date d'inscription
- jeudi 13 septembre 2007
- Statut
- Membre
- Dernière intervention
- 19 décembre 2007
14 sept. 2007 à 15:21
s/[ ]*\t*#/;\t\t&/ fonctionne
jipicy
7 oct. 2008 à 15:51
- Messages postés
- 40805
- Date d'inscription
- jeudi 28 août 2003
- Statut
- Modérateur
- Dernière intervention
- 10 août 2020
7 oct. 2008 à 15:51
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$;-))
abou
>
jipicy
7 oct. 2008 à 22:17
- Messages postés
- 40805
- Date d'inscription
- jeudi 28 août 2003
- Statut
- Modérateur
- Dernière intervention
- 10 août 2020
7 oct. 2008 à 22:17
OK ça marche pour une chaîne constante. Qu'en est-il des chaînes variables ? Merci
jipicy
7 oct. 2008 à 22:19
- Messages postés
- 40805
- Date d'inscription
- jeudi 28 août 2003
- Statut
- Modérateur
- Dernière intervention
- 10 août 2020
7 oct. 2008 à 22:19
Qu'entends-tu par variable ???
Des exemples ?
Des exemples ?
abou
>
jipicy
7 oct. 2008 à 22:27
- Messages postés
- 40805
- Date d'inscription
- jeudi 28 août 2003
- Statut
- Modérateur
- Dernière intervention
- 10 août 2020
7 oct. 2008 à 22:27
OK ça marche pour une chaîne constante. Qu'en est-il des chaînes variables ? Merci
J'ai trouvé : il suffit d'utiliser les doubles quotes !
sed "/$ch/ s/.*/#&/" test.txt
au lieu de
sed '/$ch/ s/.*/#&/' test.txt
J'ai trouvé : il suffit d'utiliser les doubles quotes !
sed "/$ch/ s/.*/#&/" test.txt
au lieu de
sed '/$ch/ s/.*/#&/' test.txt
jipicy
7 oct. 2008 à 23:02
- Messages postés
- 40805
- Date d'inscription
- jeudi 28 août 2003
- Statut
- Modérateur
- Dernière intervention
- 10 août 2020
7 oct. 2008 à 23:02
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]$;-\
jipicy
7 oct. 2008 à 23:05
- Messages postés
- 40805
- Date d'inscription
- jeudi 28 août 2003
- Statut
- Modérateur
- Dernière intervention
- 10 août 2020
7 oct. 2008 à 23:05
Ça marche pareil :
[tmpfs]$ cat test.txt un deux trois cent-deux vingt-deux cinq six deux [tmpfs]$ sed -i.bak '/'"$ch"'/ s/.*/#&/' test.txt [tmpfs]$ cat test.txt un #deux trois #cent-deux #vingt-deux cinq #six deux [tmpfs]$;-\
jipicy
7 oct. 2008 à 23:15
- Messages postés
- 40805
- Date d'inscription
- jeudi 28 août 2003
- Statut
- Modérateur
- Dernière intervention
- 10 août 2020
7 oct. 2008 à 23:15
Ben en fait ça crée une sauvegarde. Tu mets ce que tu veux après le "i"...
Et tant qu'on y est, il y a plus simple pour rajouter un # en début de ligne :
Et tant qu'on y est, il y a plus simple pour rajouter un # en début de ligne :
sed '/deux/ s/^/#/' test.txt;-))
abou
>
jipicy
7 oct. 2008 à 23:52
- Messages postés
- 40805
- Date d'inscription
- jeudi 28 août 2003
- Statut
- Modérateur
- Dernière intervention
- 10 août 2020
7 oct. 2008 à 23:52
Fantastique sauf qu'avec une variable il me faut absolument les doubles quotes.
Et pour le fun : à quoi bon commenter une ligne qui l'est déjà ?
Ce qui donnerait avec des regex (un début, une négation)… je suis fatigué et toi ?
Et pour le fun : à quoi bon commenter une ligne qui l'est déjà ?
Ce qui donnerait avec des regex (un début, une négation)… je suis fatigué et toi ?
12 sept. 2013 à 23:53