GNU/Linux >> Tutoriels Linux >  >> Linux

Remplacer la plage de lignes par la plage de lignes (sed ou autres) ?

J'ai deux fichiers texte :file1 et file2 , les deux avec plusieurs lignes.

$ cat file1
line one
line two
line three
line four
line five

$ cat file2
line A
line B
line C
line D
line E
line F

Je voudrais substituer une gamme de lignes de file1 (à partir de la ligne 1_start à la ligne 1_end ) avec une plage de lignes de file2 (à partir de la ligne 2_start à la ligne 2_end ).

Par exemple, substituez les lignes 2,4 dans file1 avec les lignes 3,5 de file2 .

Ce que je ne pouvais faire jusqu'à présent, c'est extraire les lignes nécessaires de file2 avec

$ sed -n 3,5p file2

Mais cela n'aide pas à les mettre dans file1 . Est-ce possible avec sed ? Si non, est-ce possible avec un outil similaire ?

Réponse acceptée :

sed peut imprimer une plage donnée de lignes avec quelque chose comme ceci :

sed -n 'X,Yp' filename

X est la première ligne d'une plage et Y est la dernière ligne, toutes deux inclusives. -n dit sed de ne rien imprimer à moins qu'on ne lui dise explicitement de le faire et c'est ce que le p suivant la gamme fait.

Ainsi, vous pouvez facilement l'appeler trois fois, l'ajouter à un fichier temporaire, puis déplacer ce fichier où vous le souhaitez. Vous pouvez également les combiner tous en utilisant cat et processus de substitution comme le montre cet exemple (j'utilise des numéros de ligne que je viens de sortir de nulle part ; $ est la dernière ligne d'un fichier) :

cat <(sed -n '1,5p' file1) <(sed -n '10,12p' file2) <(sed -n '9,$p' file1) > file1.tmp && mv file1.tmp file1

Ici, nous remplacerions les lignes 6, 7 et 8 dans file1 avec les lignes 10, 11 et 12 de file2 .

Mise à jour : Merci à @MiniMax d'avoir signalé que cat et la substitution de processus peut être évitée en procédant comme suit :

{ sed -n '1,5p' file1; sed -n '10,12p' file2; sed -n '9,$p' file1; } > file1.tmp && mv file1.tmp file1

BAISER, après tout. 🙂


Linux
  1. Manipulation de texte en ligne de commande avec sed

  2. Sed peut-il remplacer les caractères de nouvelle ligne ?

  3. Insérer de nouvelles lignes avec des valeurs manquantes (na) ?

  4. Dupliquer, avec quelques petites modifications, quelques lignes dans un fichier texte ?

  5. Comment remplacer sed comme texte par python?

Utilisation de la commande Linux sed avec des exemples

Tutoriel Unix Sed :ajouter, insérer, remplacer et compter les lignes de fichiers

Rechercher et remplacer du texte dans un fichier entre une plage de lignes à l'aide de sed

Remplacer Sed multi-lignes

Comment remplacer récursivement les caractères par sed ?

Remplacement SED sur plusieurs lignes