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 15/04/2023, à 13:57

Akatu

[RÉSOLU] Ajouter le contenu d'un fichier à une ligne spécifique

Bonjour,

Je souhaiterais donc copier l'entièreté du fichier 2.txt à la 3e ligne du fichier 1.txt.

~/Tmp ❯ cat 1.txt                    
a
z
e
r
t
y
~/Tmp ❯ cat 2.txt                    
chat
chien
~/Tmp ❯ 

Résultat souhaité :

a
z
chat
chien
e
r
t
y

Je vois comment ajouter du texte en dur via la commande sed, exemple :

sed -i '3 i texte souhaité' 1.txt

Mais je veux mettre en variable le contenu du fichier 2.txt car ce dernier n'est jamais le même.
Vous voyez la tisane ? smile

Merci.

Dernière modification par Akatu (Le 15/04/2023, à 15:56)


KDE neon User Edition
LENOVO Ideapad L340-15IRH
Intel(R) Core(TM) i5-9300H CPU @ 2.40GHz (8 coeurs)
512 Go SSD - (M.2 2280) PCIe 3.0 x4 - NVM Express (NVMe)

Hors ligne

#2 Le 15/04/2023, à 14:24

Vobul

Re : [RÉSOLU] Ajouter le contenu d'un fichier à une ligne spécifique

Bonjour Akatu,

Voici une solution possible en utilisant la commande sed pour insérer le contenu de 2.txt à la 3ème ligne de 1.txt :

sed -i '3 r 2.txt' 1.txt

Explications :

    3 : spécifie la ligne à laquelle le texte doit être inséré.
    r : indique à sed de lire le contenu d'un fichier et de l'insérer à l'endroit spécifié.
    2.txt : le nom du fichier contenant le texte à insérer.
    -i : option pour modifier le fichier d'entrée (1.txt) directement.

Cette commande va insérer le contenu de 2.txt à la 3ème ligne de 1.txt et enregistrer les modifications directement dans 1.txt.

J'espère que cela vous aidera !


Vobul
Utilisez le retour utilisable de commandes !!!
J'aime la langue française, mais je parle franglais, deal with it.
RTFM

Hors ligne

#3 Le 15/04/2023, à 14:27

sputnick

Re : [RÉSOLU] Ajouter le contenu d'un fichier à une ligne spécifique

Edit: grillé par Vobul

Comme ça:

$ sed '2r 2.txt' 1.txt 
a
z
chat
chien
e
r
t
y

r comme read

Dernière modification par sputnick (Le 15/04/2023, à 14:36)


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#4 Le 15/04/2023, à 14:32

Vobul

Re : [RÉSOLU] Ajouter le contenu d'un fichier à une ligne spécifique

sputnick a écrit :

Edit: grillé par Vobul


Par ChatGPT en réalité wink

Dernière modification par Vobul (Le 15/04/2023, à 14:37)


Vobul
Utilisez le retour utilisable de commandes !!!
J'aime la langue française, mais je parle franglais, deal with it.
RTFM

Hors ligne

#5 Le 15/04/2023, à 14:37

sputnick

Re : [RÉSOLU] Ajouter le contenu d'un fichier à une ligne spécifique

Haaan, c'est mal de tricher smile


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#6 Le 15/04/2023, à 14:38

Vobul

Re : [RÉSOLU] Ajouter le contenu d'un fichier à une ligne spécifique

sputnick a écrit :

Haaan, c'est mal de tricher smile

smile Je t'invite à participer à cette discussion : https://forum.ubuntu-fr.org/viewtopic.p … #p22668815

Perso je pense qu'une réponse automatique d'un gpt peut régler pas mal de cas d'une manière pas trop dégueulasse. En tout cas pour ce type de question ça tape dans le mille.


Vobul
Utilisez le retour utilisable de commandes !!!
J'aime la langue française, mais je parle franglais, deal with it.
RTFM

Hors ligne

#7 Le 15/04/2023, à 15:55

Akatu

Re : [RÉSOLU] Ajouter le contenu d'un fichier à une ligne spécifique

Je n'ai pas eu le réflexe smile
Merci pour votre aide et bon week-end.


KDE neon User Edition
LENOVO Ideapad L340-15IRH
Intel(R) Core(TM) i5-9300H CPU @ 2.40GHz (8 coeurs)
512 Go SSD - (M.2 2280) PCIe 3.0 x4 - NVM Express (NVMe)

Hors ligne

#8 Le 26/05/2023, à 15:48

Postmortem

Re : [RÉSOLU] Ajouter le contenu d'un fichier à une ligne spécifique

Vobul a écrit :

Perso je pense qu'une réponse automatique d'un gpt peut régler pas mal de cas d'une manière pas trop dégueulasse. En tout cas pour ce type de question ça tape dans le mille.

Sauf que dans le cas présent, chatGPT n'a pas donné la bonne réponse, contrairement à sputnick ! tongue


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#9 Le 26/05/2023, à 16:11

Watael

Re : [RÉSOLU] Ajouter le contenu d'un fichier à une ligne spécifique

non plus ! big_smile

je veux mettre en variable le contenu du fichier 2.txt

en bash :

content=$(<fichierAuHasard.txt) #ceci est équivalent à `cat fichierAuHasard.txt'
sed  '3i'"$content" fic1.txt  # je ne mets pas le `-i' pour que tu valides la commande avant de l'exécuter en vrai.

à peu de chose près : je n'ai pas testé. sad
pour r (read) c'est pareil : il faut fermer les apostrophes autour des commandes sed, mettre des guillemets aux variables shell, et ainsi de suite s'il y a lieu. smile

Dernière modification par Watael (Le 26/05/2023, à 16:13)


Connected \o/
Welcome to sHell. · eval is evil.

En ligne

#10 Le 26/05/2023, à 16:22

Akatu

Re : [RÉSOLU] Ajouter le contenu d'un fichier à une ligne spécifique

Bah si, la réponse de ChatGPT fonctionne très bien. neutral

sed -i '2r source.txt' final.txt
Faut juste faire un -1 sur le chiffre. Si on veut insérer à la 3e ligne, faut mettre 2r par exemple.

@Watael
Voilà ce que ça donne chez moi :

~/Tmp ❯ cat source.txt
ceci est le texte à insérer
et pas autre chose
~/Tmp ❯ cat final.txt 
1
2
3
4%                                                                                                        
~/Tmp ❯ cat script.sh 
#!/bin/bash
content=$(<source.txt)
sed -i '2i'"$content" final.txt%                                                                          
~/Tmp ❯ ./script.sh 
sh: 1: t: not found
sh: 1: t: not found
sh: 1: t: not found
sh: 1: t: not found
~/Tmp ❯ cat final.txt 
1
ceci est le texte à insérer
2
3
4%                                                                                                        
~/Tmp ❯ 

Dernière modification par Akatu (Le 26/05/2023, à 16:22)


KDE neon User Edition
LENOVO Ideapad L340-15IRH
Intel(R) Core(TM) i5-9300H CPU @ 2.40GHz (8 coeurs)
512 Go SSD - (M.2 2280) PCIe 3.0 x4 - NVM Express (NVMe)

Hors ligne

#11 Le 26/05/2023, à 16:27

Postmortem

Re : [RÉSOLU] Ajouter le contenu d'un fichier à une ligne spécifique

Akatu a écrit :

Bah si, la réponse de ChatGPT fonctionne très bien. neutral

Oui, je voulais juste faire une petite boutade sur le fait qu'il fallait mettre 2 à la place de 3 et que donc les IA sont donc plus bêtes que nous !!! lol


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#12 Le 26/05/2023, à 16:28

Akatu

Re : [RÉSOLU] Ajouter le contenu d'un fichier à une ligne spécifique

Je n'ai aucun doute là-dessus lol


KDE neon User Edition
LENOVO Ideapad L340-15IRH
Intel(R) Core(TM) i5-9300H CPU @ 2.40GHz (8 coeurs)
512 Go SSD - (M.2 2280) PCIe 3.0 x4 - NVM Express (NVMe)

Hors ligne

#13 Le 26/05/2023, à 16:37

Postmortem

Re : [RÉSOLU] Ajouter le contenu d'un fichier à une ligne spécifique

Watael a écrit :

en bash :

content=$(<fichierAuHasard.txt) #ceci est équivalent à `cat fichierAuHasard.txt'
sed  '3i'"$content" fic1.txt  # je ne mets pas le `-i' pour que tu valides la commande avant de l'exécuter en vrai.

Dans sed, utiliser « i"$var" », où $var est le contenu de tout un fichier, c'est un sacré bordel ; dans le fichier, il peut y avoir des caractères interprétés par sed.


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#14 Le 26/05/2023, à 16:51

sputnick

Re : [RÉSOLU] Ajouter le contenu d'un fichier à une ligne spécifique

Postmortem a écrit :

Dans sed, utiliser « i"$var" », où $var est le contenu de tout un fichier, c'est un sacré bordel ; dans le fichier, il peut y avoir des caractères interprétés par sed.

Wé, ça parrait 'un peu' brico.

Le truc, c'est que moi je teste avant de publier ici ou sur stackoverflow ou n'importe où. ChatGTP, il te balance des trucs des fois qui ne sont pas hyper pertinents et non vérifiés. Par contre, très utile pour se servir de modules particuliers et denses (comme Selenium) en Python (ou autre) pour savoir faire quelque chose de précis.


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#15 Le 26/05/2023, à 17:09

Watael

Re : [RÉSOLU] Ajouter le contenu d'un fichier à une ligne spécifique

des fois, j'ai la flemme de tester. l'OP peut partir de ce que je donne, en sachant que je n'ai pas testé, et expérimenter. il a une base concrète pour débuter des tests.
et puis je suis là, je ne lâcherai avant que ça fonctionne.

sed -i '2i'"$content" final.txt%

je n'ai pas écrit ce %. d'où vient-il ? interprétation du texte par sed, comme cela a été évoqué.
je n'ai d'ailleurs pas dit que c'était la meilleure solution, je réponds précisément à la question. et si ça ne fonctionne pas/pas de manière optimale, on trouvera une autre façon de faire !

des fois, aller dans le sens de l'OP, c'est aussi lui montrer pourquoi c'est pas top.

j'suis péremptoire, ça va pas.
j'suis conciliant, ça va pas.

vraiment, vous ne savez pas ce que vous voulez. big_smile

Dernière modification par Watael (Le 26/05/2023, à 17:13)


Connected \o/
Welcome to sHell. · eval is evil.

En ligne

#16 Le 26/05/2023, à 17:12

sputnick

Re : [RÉSOLU] Ajouter le contenu d'un fichier à une ligne spécifique

Akatu a écrit :

Je n'ai pas eu le réflexe smile
Merci pour votre aide et bon week-end.

Pour moi cela veut dire 'c'est bon merci' non? tongue

En gros, déjà résolu. (voir le [RÉSOLU] dans le titre).

Dernière modification par sputnick (Le 26/05/2023, à 17:13)


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#17 Le 26/05/2023, à 17:20

Postmortem

Re : [RÉSOLU] Ajouter le contenu d'un fichier à une ligne spécifique

Watael a écrit :

j'suis péremptoire, ça va pas.
j'suis conciliant, ça va pas.

Ben non, ça va pas !! lol:lol::lol:

Watael a écrit :

vraiment, vous ne savez pas ce que vous voulez. big_smile

Si si, t’embêter !! big_smile
Puis bon, avec tous les "eval" que tu m'as fait supprimer de mes scripts (bon, j'en ai gardé, faut pas déconner !), tu mérites bien que je t'embête !


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#18 Le 26/05/2023, à 19:03

Akatu

Re : [RÉSOLU] Ajouter le contenu d'un fichier à une ligne spécifique

je n'ai pas écrit ce %. d'où vient-il ? 

Ça vient de zsh. Promis c'est pas moi tongue
Et oui le problème est résolu et en prod depuis un moment.

Dernière modification par Akatu (Le 26/05/2023, à 19:03)


KDE neon User Edition
LENOVO Ideapad L340-15IRH
Intel(R) Core(TM) i5-9300H CPU @ 2.40GHz (8 coeurs)
512 Go SSD - (M.2 2280) PCIe 3.0 x4 - NVM Express (NVMe)

Hors ligne