Как вы дублируете две совпадающие строки по порядку с помощью sed? - PullRequest
1 голос
/ 21 сентября 2011

Если у меня есть файл, который выглядит так:

word
foo
bar
word

И я хочу продублировать foo\nbar строки, чтобы они выглядели так:

word
foo
bar
foo
bar
word

Я пытался использовать N для загрузки следующей строки в буфер, но я должен использовать ее неправильно, так как иногда кажется, что она пропускает строки.

sed -e '{
N
s/\(foo\nbar\)/\1\1/
}' foobar.txt

Я думаю, что он загружает word\nfoo в буфер, затем bar\nword в буфер и полностью пропускает шаблон. Как вы используете N соответственно? Будет ли это проще с awk, perl или другим инструментом?

Ответы [ 2 ]

1 голос
/ 22 сентября 2011

Поскольку вы специально пометили вопрос с помощью sed, я решил опубликовать решение sed:

/foo/,/bar/{
i\
foo
i\
bar
d
}


$ sed -f s.sed input 
word
foo
bar
foo
bar
word
1 голос
/ 21 сентября 2011

в awk:

awk -v word1="foo" -v word2="bar" '
  {print} 
  prev==word1 && $1==word2 {print word1; print word2}
  {prev=$1}
' filename
...