#1 Le 20/10/2020, à 17:12
- diesel
[RÉSOLU] sed ; insérer une ligne commençant par une tabulation
Rebonsoir,
J'ai un fichier contenant des lignes de texte commençant par une tabulation. Comme ça par exemple :
tata
tete
titi
toto
tutu
et je voudrais (avec sed sous bash) insérer une ligne après la ligne 3 avec du texte contenu dans une variable et précédé d'une tabulation.
J'ai donc avant :
variable="texte"
et je voudrais que le fichier devienne :
tata
tete
titi
texte
toto
tutu
J'ai essayé des choses comme :
sed -i 3a\t$variable fichier
mais ça marche pô.
Quelqu'un aurait une idée ?
Merci d'avance.
Amicalement.
Jean-Marie
Dernière modification par diesel (Le 24/10/2020, à 09:38)
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#2 Le 20/10/2020, à 17:28
- nany
Re : [RÉSOLU] sed ; insérer une ligne commençant par une tabulation
Bonjour,
sed -i "3a\\\t$variable" fichier
En ligne
#3 Le 20/10/2020, à 17:35
- diesel
Re : [RÉSOLU] sed ; insérer une ligne commençant par une tabulation
SUPER !
Merci Nany.
J'avais essayé avec deux anti-slash. Il m'en manquait un.
{EDIT] D'ailleurs, tu peux m'expliquer pourquoi trois ? [/EDIT]
Amicalement.
Jean-Marie
Dernière modification par diesel (Le 20/10/2020, à 18:01)
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#4 Le 22/10/2020, à 21:36
- kamaris
Re : [RÉSOLU] sed ; insérer une ligne commençant par une tabulation
Parce que
$ echo "\\"
\
Hors ligne
#5 Le 23/10/2020, à 07:30
- diesel
Re : [RÉSOLU] sed ; insérer une ligne commençant par une tabulation
Pas compris.
Parce que :
jean-marie@jean-marie:~$ cat toto
sfhj
qgh
qdgh
qdgh
jean-marie@jean-marie:~$
et
jean-marie@jean-marie:~$ sed -i "3atutu" toto
jean-marie@jean-marie:~$ cat toto
sfhj
qgh
qdgh
tutu
qdgh
jean-marie@jean-marie:~$
Donc, si je veux ajouter un "\t" avant tutu, je comprends bien qu'il faille deux anti slash (j'ai d'ailleurs essayé), mais je ne comprends toujours pas pourquoi trois.
Amicalement.
Jean-Marie
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#6 Le 23/10/2020, à 08:56
- nany
Re : [RÉSOLU] sed ; insérer une ligne commençant par une tabulation
Ah tiens, j’avais pas vu l’edit.
Alors,
Parce que
$ echo "\\" \
Oui, et pour le troisième backslash (ou plutôt le premier), celui-ci est interprété par sed comme faisant partie de la syntaxe de la commande a.
a \ text Append text, which has each embedded newline preceded by a backslash.
Pour s’en rendre compte, on peux déboguer :
sed --debug "3a\t$variable" fichier
sed --debug "3a\\t$variable" fichier
sed --debug "3a\\\t$variable" fichier
En ligne
#7 Le 23/10/2020, à 10:46
- erresse
Re : [RÉSOLU] sed ; insérer une ligne commençant par une tabulation
Pour s’en rendre compte, on peux déboguer :
sed --debug "3a\t$variable" fichier
sed --debug "3a\\t$variable" fichier
sed --debug "3a\\\t$variable" fichier
Heu... --debug ??? => option inconnue de mon système.
Mais on peut très bien vérifier la chose sans cette option, ça affiche le résultat de chaque ligne.
Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois le problème solutionné, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.
Hors ligne
#8 Le 23/10/2020, à 11:42
- kamaris
Re : [RÉSOLU] sed ; insérer une ligne commençant par une tabulation
Donc, si je veux ajouter un "\t" avant tutu, je comprends bien qu'il faille deux anti slash (j'ai d'ailleurs essayé), mais je ne comprends toujours pas pourquoi trois.
Moi c'est le sens de ce « Donc » que je ne comprends pas : il n'y a pas d'implication entre l'exemple que tu donnes et le fait qu'il faille un, deux ou dix antislashs pour insérer une tabulation en début de ligne.
Ce qui est absent de mon « explication » (sommaire, j'admets) donnée en #4, c'est effectivement ce que dit nany en #6 : la commande a de sed prend le premier antislash pour elle.
Donc, si on veut insérer une tabulation en début de ligne, il faut mettre deux antislashs, comme ceci :
$ sed '3a\\ttutu' toto
sfhj
qgh
qdgh
tutu
qdgh
$
Mais là, j'ai utilisé des guillemets simples.
Si maintenant j'utilise des guillemets doubles, ils vont prendre les deux antislashs pour n'en faire qu'un avant que sed ait le temps de s'en emparer (c'est ça que je dis en #4) :
$ sed "3a\\ttutu" toto
sfhj
qgh
qdgh
ttutu
qdgh
$
Donc, il faut en mettre quatre : deux qui n'en font qu'un pour la commande a de sed, et deux qui n'en font qu'un pour la tabulation :
$ sed "3a\\\\ttutu" toto
sfhj
qgh
qdgh
tutu
qdgh
$
Mais en fait, on peut se contenter d'en mettre trois, car alors les guillemets doubles vont n'en faire qu'un à partir des deux premiers, en laissant le troisième tranquille car il est succédé par t :
$ echo "\\\\t"
\\t
$ echo "\\\t"
\\t
$ echo '\\t'
\\t
$
Ma réponse en #4 avait l'avantage d'être courte !
Hors ligne
#9 Le 23/10/2020, à 13:00
- diesel
Re : [RÉSOLU] sed ; insérer une ligne commençant par une tabulation
Ma réponse en #4 avait l'avantage d'être courte !
Oui, mais je ne l'avais pas comprite.
Pour ce qui est du "donc", dans l'exemple que j'ai mis, on voit que la commande a (append) de sed peut se passer du "\". D'où le "donc" suggérant qu'à la chaîne de caractères "tutu", on ajoute un "\\t" avant avec ses deux anti-slash.
Cette fois ci, c'est bon, j'ai compris (enfin ).
Merci à tous.
Amicalement.
Jean-Marie
Dernière modification par diesel (Le 23/10/2020, à 13:07)
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#10 Le 23/10/2020, à 14:28
- Sciensous
Re : [RÉSOLU] sed ; insérer une ligne commençant par une tabulation
ben moi aussi j'ai enfin compris les subtilités du double triple ou quadruple \
(le triple étant donc un peu particulier: échappement d'un caractère qui n'a pas besoin de l'être )
merci à tous pour ce petit cours d'anti\
antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )
Hors ligne