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
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
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/
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
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