sed - добавить к следующей строке, используя командную строку - PullRequest
3 голосов
/ 17 марта 2012

Я хочу добавить "dddd" к следующей строке всякий раз, когда сталкиваюсь с "=" в текстовом файле.

Эта команда

sed -i '/=/s|$| dddd|' *.krn

близкачто я ищу, так как он добавляется к текущей строке, где "=".Как мне вместо этого добавить следующую строку?

Ответы [ 4 ]

3 голосов
/ 17 марта 2012

Итак, чтобы повторить вопрос, когда вы сопоставляете одну строку, вы хотите добавить строку к следующей строке - строку, которая уже существует, вместо добавления новой строки после нее с новыми данными.

Я думаю, что это будет работать для вас:

sed '/=/ { N; s/$/ ddd/ }'

Скажем, у вас есть файл вроде:

=
hello
world
=
foo
bar
=

Тогда обработка этой команды приведет к:

=
hello ddd
world
=
foo ddd
bar
=

Хитрость здесь заключается в том, чтобы сначала использовать команду N.Это читается в «следующей» строке ввода.Следующие за ним команды будут применены к следующей строке.

3 голосов
/ 17 марта 2012

Используйте приложение, см. Здесь:

например:.

$ echo $'abc\ndef\ne=f\nqqq'
abc
def
e=f
qqq
$ echo $'abc\ndef\ne=f\nqqq'|sed '/=/adddd'
abc
def
e=f
dddd
qqq

Отредактировано, чтобы уточнить согласно комментарию от @ je4d - если вы хотите добавить к тому, что присутствует в следующей строке, вы можете использовать это:

$ echo $'abc\ndef\ne=f\nqqq\nyyy'
abc
def
e=f
qqq
yyy
$ echo $'abc\ndef\ne=f\nqqq\nyyy'|sed '/=/{n;s/$/ dddd/}'
abc
def
e=f
qqq dddd
yyy

Смотрите здесь, чтобы найти отличную чит-таблицу sed для получения дополнительной информации:

1 голос
/ 17 марта 2012

Я не гуру седа, но я могу делать то, что вы хотите с помощью awk:

'{PREV=MATCH; MATCH="no"}
 /=/{MATCH="yes"} 
 PREV=="yes"{print $0 " dddd"}
 PREV!="yes"{print}'

Демо-версия:

$ echo -e 'foo\nba=r\nfoo\n=bar\nfoo\nfoo\nb=ar\nx' 
foo
ba=r
foo
=bar
foo
foo
b=ar
x

$ echo -e 'foo\nba=r\nfoo\n=bar\nfoo\nfoo\nb=ar\nx' | awk '{APPEND=LAST; LAST="no"} /=/{LAST="yes"} APPEND=="yes"{print $0 " dddd"} APPEND!="yes"{print}'
foo
ba=r
foo dddd
=bar
foo dddd
foo
b=ar
x dddd
0 голосов
/ 17 марта 2012

Это может работать для вас:

echo -e "=\nx " | sed '/=/{$q;N;s/$/dddd/}'
=
x dddd
...