GNU/Linux >> Tutoriels Linux >  >> Linux

insérer le contenu d'un fichier dans un autre (dans une ligne spécifique du fichier qui est envoyé)-BASH/LINUX

J'utiliserais probablement sed pour ce travail :

line=3
sed -e "${line}r file2" file1

Si vous cherchez à écraser file1 et vous avez GNU sed , ajoutez le -i option. Sinon, écrivez dans un fichier temporaire, puis copiez/déplacez le fichier temporaire sur l'original, en nettoyant si nécessaire (c'est le trap trucs ci-dessous). Remarque :copier le temporaire sur le fichier préserve les liens; le déplacement ne fonctionne pas (mais est plus rapide, surtout si le fichier est volumineux).

line=3
tmp="./sed.$$"
trap "rm -f $tmp; exit 1" 0 1 2 3 13 15
sed -e "${line}r file2" file1 > $tmp
cp $tmp file1
rm -f $tmp
trap 0

Juste pour le plaisir, et juste parce que nous aimons tous ed , l'éditeur standard, voici un ed version. C'est très efficace (ed est un authentique éditeur de texte) !

ed -s file2 <<< $'3r file1\nw'

Si le numéro de ligne est stocké dans la variable line puis :

ed -s file2 <<< "${line}r file1"$'\nw'

Juste pour faire plaisir à Zack, voici une version avec moins de bashisme, au cas où vous n'aimeriez pas bash (personnellement, je n'aime pas les pipes et les subshells, je préfère les herestrings, mais bon, comme je l'ai dit, c'est uniquement pour faire plaisir à Zack) :

printf "%s\n" "${line}r file1" w | ed -s file2

ou (pour plaire à Sorpigal):

printf "%dr %s\nw" "$line" file1 | ed -s file2

Comme Jonathan Leffler le mentionne dans un commentaire, et si vous avez l'intention d'utiliser cette méthode dans un script, utilisez un heredoc (c'est généralement le plus efficace) :

ed -s file2 <<EOF
${line}r file1
w
EOF

J'espère que cela vous aidera !

PS N'hésitez pas à laisser un commentaire si vous sentez que vous avez besoin de vous exprimer sur les façons de conduire ed , l'éditeur standard.


cat file1 >>file2

ajoutera le contenu du fichier1 au fichier2.

cat file1 file2

concaténera file1 et file2 et enverra la sortie au terminal.

cat file1 file2 >file3

créera ou écrasera le fichier3 avec la concaténation du fichier1 et du fichier2

cat file1 file2 >>file3

ajoutera la concaténation de fichier1 et fichier2 à la fin de fichier3.

Modifier :

Pour l'agrégation du fichier 2 avant d'ajouter le fichier 1 :

sed -e '11,$d' -i file2 && cat file1 >>file2

ou pour faire un fichier de 500 lignes :

n=$((500-$(wc -l <file1)))
sed -e "1,${n}d" -i file2 && cat file1 >>file2

Linux
  1. Comment extraire le fichier tar.gz sous Linux à l'aide de la ligne de commande

  2. Comment afficher des lignes spécifiques d'un fichier dans la ligne de commande Linux

  3. Créer des fichiers en utilisant la ligne de commande sous Linux

  4. Copiez le contenu du fichier dans le presse-papiers du terminal Linux

  5. Linux - grep de certaines lignes à la fin du fichier

Utilisation avancée du visualiseur de fichiers avec moins de texte sous Linux

Comment afficher le contenu d'une archive ou d'un fichier compressé sous Linux

Afficher le contenu d'un fichier dans la ligne de commande Linux

Outil pour obtenir les lignes d'un fichier qui ne sont pas dans un autre ?

Comment insérer du texte avant la première ligne d'un fichier ?

5 commandes pour afficher le contenu d'un fichier en ligne de commande Linux