sed добавить строку только в 1 случае - PullRequest
3 голосов
/ 26 октября 2011

иметь этот файл

ServerName *
ServerAlias *
ServerAlias *

<Directory>

Я хочу добавить новую строку после первого появления ServerAlias ​​с текстом S2. Я пробовал следующее

sed '/ServerAlias/ a\S2\' foo

Но это добавляется после всех вхождений.

Мой окончательный результат должен быть

ServerName *
ServerAlias *
S2
ServerAlias *

<Directory>

Ответы [ 2 ]

5 голосов
/ 26 октября 2011

На самом деле, это не sed, но, возможно, awk может вам помочь.

$> cat ./file
ServerName *
ServerAlias *
ServerAlias *

<Directory>

$> awk '{print} /^ServerAlias/ && !n {print "S2"; n++}' ./file
ServerName *
ServerAlias *
S2
ServerAlias *

<Directory>

UPD : ошибка исправлена, спасибо glenn_jackman

1 голос
/ 26 октября 2011

Лучше всего использовать приведенное выше решение awk, но если вы действительно хотите сделать это в (GNU) sed, то сработает следующее:

sed '0,/^ServerAlias.\+/s//\0\nS2/' file

Кредит переходит на FAQ по sed .

...