Il m'a fallu un certain temps pour comprendre comment procéder, donc publier au cas où quelqu'un d'autre chercherait la même chose.
Pour ajouter une nouvelle ligne après un modèle, vous pouvez également dire:
sed '/pattern/{G;}' filename
Citer manuel GNU sed :
G
Append a newline to the contents of the pattern space, and then append the contents of the hold space to that of the pattern space.
MODIFIER:
Soit dit en passant, cela se trouve être couvert par sed one liners :
# insert a blank line below every line which matches "regex"
sed '/regex/G'
Cette commande sed:
sed -i '' '/pid = run/ a\
\
' file.txt
Trouve la ligne avec: pid = run
file.txt avant
; Note: the default prefix is /usr/local/var
; Default Value: none
;pid = run/php-fpm.pid
; Error log file
et ajoute un saut de ligne après cette ligne dans file.txt
file.txt après
; Note: the default prefix is /usr/local/var
; Default Value: none
;pid = run/php-fpm.pid
; Error log file
Ou si vous souhaitez ajouter du texte et un saut de ligne:
sed -i '/pid = run/ a\
new line of text\
' file.txt
file.txt après
; Note: the default prefix is /usr/local/var
; Default Value: none
;pid = run/php-fpm.pid
new line of text
; Error log file
Une simple substitution fonctionne bien:
sed 's/pattern.*$/&\n/'
Exemple :
$ printf "Hi\nBye\n" | sed 's/H.*$/&\nJohn/'
Hi
John
Bye
Pour être conforme aux normes, remplacez\n par une nouvelle barre oblique inversée:
$ printf "Hi\nBye\n" | sed 's/H.*$/&\
> John/'
Hi
John
Bye
sed '/pattern/a\\r' file name
Il ajoutera un retour après le modèle tandis que g
remplacera le modèle par une ligne vierge.
Si une nouvelle ligne (vide) doit être ajoutée à la fin du fichier, utilisez ceci:
sed '$a\\r' file name
Une autre possibilité, par exemple si vous n'avez pas de registre d'attente vide, cela pourrait être:
sed '/pattern/{p;s/.*//}' file
Explication:/pattern/{...}
= appliquer une séquence de commandes, si une ligne avec un motif est trouvée,p
= imprimer la ligne courante,;
= séparateur entre les commandes,s/.*//
= remplacer quoi que ce soit par rien dans le registre de modèle,
puis imprimez automatiquement le registre de modèle vide en tant que ligne supplémentaire)