Comment puis-je insérer une nouvelle ligne / linebreak après une ligne en utilisant sed

il m'a fallu un certain temps pour comprendre comment faire cela, donc en affichant au cas où quelqu'un d'autre est à la recherche pour la même chose.

25
demandé sur realityloop 2013-06-28 14:52:19
la source

4 ответов

pour ajouter une nouvelle ligne après un motif, vous pouvez aussi dire:

sed '/pattern/{G;}' filename

Citant 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.

EDIT:

soit dit en passant, il se trouve que cela est couvert dans sed revêtements un:

 # insert a blank line below every line which matches "regex"
 sed '/regex/G'
24
répondu devnull 2013-06-28 15:22:52
la source

Cette commande sed:

sed -i '' '/pid = run/ a\
\
' file.txt

Trouve la ligne avec: pid = run

fichier.txt avant

; Note: the default prefix is /usr/local/var
; Default Value: none
;pid = run/php-fpm.pid

; Error log file

et ajoute un linebreak après cette ligne dans le fichier.txt

fichier.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 voulez ajouter du texte et un saut de ligne:

sed -i '/pid = run/ a\
new line of text\
' file.txt

fichier.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
8
répondu realityloop 2013-06-28 14:52:19
la source

Une simple substitution fonctionne bien:

sed 's/pattern.*$/&\n/'

Exemple :

$ printf "Hi\nBye\n" | sed 's/H.*$/&\nJohn/'
Hi
John
Bye

Pour être compatible avec le standard, remplacer les \n par une barre oblique inverse saut de ligne :

$ printf "Hi\nBye\n" | sed 's/H.*$/&\
> John/'
Hi
John
Bye
2
répondu Richard 2016-06-06 07:33:40
la source
sed '/pattern/a\r' file name 

ajout d'un retour après le modèle g va remplacer le modèle par une ligne vide.

Si une nouvelle ligne (vide) doit être ajouté à la fin du fichier utiliser ceci:

sed '$a\r' file name
2
répondu nemo 2017-06-06 16:53:00
la source

Autres questions sur