2011-07-19 74 views
0

我的一個配置都有特定的foo部分:SED/AWK:刪除圖案線條圖案

# Configuration foo - Start 
blah 
blah 
blah 
# Configuration foo - End 

我想修改適用於本部分與另一個文件中的內容替換它(例如, new_foo.txt)。本節總是# Configuration foo - Start開始,以# Configuration foo - Start

什麼是在Ubuntu \ bash的生態系統,以實現這一目標的最佳方式結束?我可以寫一個小的Python腳本,但我懷疑這個腳本可能會有一個優雅的單行程。

回答

4
sed -e '/^# Configuration foo - Start$/r new_foo.txt' -e '/^# Configuration foo - Start$/,/^# Configuration foo - End$/d' 
+0

令人印象非常深刻! –

3
{ 
    sed -n '0,/^# Configuration foo - Start$/p' infile 
    cat new_foo.txt 
    sed -n '/^# Configuration foo - End$/,$p' infile 
} > outfile 

如果你把它全部在一行然後不要忘記把;}之前的空間。

1

假設new_foo.txt足夠小,在內存中保存的,這對我的作品:

awk 'NR==FNR {A[i++] = $0} NR>FNR && !exclude {print $0} /# Configuration foo - Start/ {exclude=1; for (line in A) { print line }} /# Configuration foo - End/ {exclude=0; print$0}' new_foo.txt config