Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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. wink smile

{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,

kamaris a écrit :

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.

man sed a écrit :
       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

nany a écrit :

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

diesel a écrit :

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 ! big_smile

Hors ligne

#9 Le 23/10/2020, à 13:00

diesel

Re : [RÉSOLU] sed ; insérer une ligne commençant par une tabulation

kamaris a écrit :

Ma réponse en #4 avait l'avantage d'être courte ! big_smile

Oui, mais je ne l'avais pas comprite. wink

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 wink smile ).

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 wink un peu particulier: échappement d'un caractère qui n'a pas besoin de l'être )
merci à tous pour ce petit cours d'anti\
wink


antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )

Hors ligne