2011-09-21 21 views
1

如果我有一個看起來像這樣的文件:你如何在sed中重複兩條匹配的行?

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或其他工具會更容易嗎?

回答

1

既然你特別標記的問題與sed的,我想我會發佈一個sed的解決方案:

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


$ sed -f s.sed input 
word 
foo 
bar 
foo 
bar 
word 
1
在AWK

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