我的一个配置有一个特定的foo
部分:
# Configuration foo - Start
blah
blah
blah
# Configuration foo - End
我想对此部分应用更改,将其替换为另一个文件的内容(例如new_foo.txt
)。该部分始终以# Configuration foo - Start
开头,以# Configuration foo - Start
在Ubuntu \ bash生态系统中实现这一目标的最佳方法是什么?我可以写一个小的Python脚本,但我怀疑这个可能有一个优雅的单行。
答案 0 :(得分:4)
sed -e '/^# Configuration foo - Start$/r new_foo.txt' -e '/^# Configuration foo - Start$/,/^# Configuration foo - End$/d'
答案 1 :(得分:3)
{
sed -n '0,/^# Configuration foo - Start$/p' infile
cat new_foo.txt
sed -n '/^# Configuration foo - End$/,$p' infile
} > outfile
如果你把它全部放在一行上,那么不要忘记在;
之前放置一个}
和一个空格。
答案 2 :(得分: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