web-dev-qa-db-fra.com

Avec sed, insérez une ligne au-dessus ou au-dessous du motif?

J'ai besoin d'éditer un bon nombre de fichiers, en insérant une ligne ou plusieurs lignes soit juste en dessous d'un motif unique, soit au-dessus de celui-ci. Veuillez indiquer comment utiliser sed, awk, Perl (ou tout autre élément) dans un shell. Merci! Exemple:

some text
lorem ipsum dolor sit amet
more text

Je veux insérer consectetur adipiscing elit après lorem ipsum dolor sit amet, afin que le fichier de sortie ressemble à ceci:

some text
lorem ipsum dolor sit amet
consectetur adipiscing elit
more text
71
vehomzzz

Pour ajouter après le motif: (-i est pour remplacer à la place). line1 et line2 sont les lignes que vous souhaitez ajouter (ou ajouter)

sed -i '/pattern/a \
line1 \
line2' inputfile

Sortie:

#cat inputfile
 pattern
 line1 line2 

Pour ajouter les lignes avant:

sed -i '/pattern/i \
line1 \
line2' inputfile

Sortie:

#cat inputfile
 line1 line2 
 pattern
144
Kamal

Ce qui suit ajoute une ligne après SearchPattern.

sed -i '/SearchPattern/aNew Text' SomeFile.txt

Il insère New Text une ligne sous chaque ligne contenant SearchPattern.

Pour ajouter deux lignes , vous pouvez utiliser un \ et entrer une nouvelle ligne tout en tapant New Text.

POSIX sed nécessite un \ et une nouvelle ligne après la fonction a sed. [1] Spécifier le texte à ajouter sans la nouvelle ligne est une extension GNU sed (comme documenté dans la page d'informations sed), de sorte que son utilisation n'est pas aussi portable.

[1] https://unix.stackexchange.com/questions/52131/sed-on-osx-insert-at-a-certain-line/

33
jahroy

Insérez un nouveau verset après le verset donné dans votre strophe:

sed -i '/^lorem ipsum dolor sit amet$/ s:$:\nconsectetur adipiscing elit:' FILE
3
alinsoar

Plus portable à utiliser ed; certains systèmes ne supportent pas\n in sed

printf "/^lorem ipsum dolor sit amet/a\nconsectetur adipiscing elit\n.\nw\nq\n" |\
    /bin/ed $filename
1
Chris Rees