替換文件中區塊的工具

替換文件中區塊的工具

大多數組態管理軟體工具都有一種方法來取代檔案中的區塊。

例子:

我正是想要這個,但不需要這些大型工具的開銷。

有沒有一個簡單的工具來更新和維護文字檔案中的區塊?

範例:我要更新/etc/some-server/some-server.conf

我想插入/更新這樣的區塊:

## start my-block
key1=value1
key2=value2
## end my-block

我知道我可以用 awk 或 python 的一些行來做到這一點,但我搜尋了一個現成的工具。

答案1

Sed 非常適合文字替換。我沒有靠近 bash shell 來測試這個,但粗略地說,鑑於我對你的問題的了解有限,你需要/已經可用的命令是

sed '/in lines containing this/cut this/paste this/' in.file >out.file

它還採用替代的“s/this/that/”格式,並且是一系列管道命令的理想選擇

答案2

這有多簡單取決於該工具在非標稱條件下的行為。如果文件中總是有一個區塊帶有特殊註釋,那麼使用 awk 就很容易了。

awk '
    /^## end my-block$/ {skip=0}
    !skip {print}
    /^## start my-block$/ {skip=1; system("cat new-block-content") || exit(1)}
' </etc/some-server/some-server.conf >/etc/some-server/some-server.conf.new &&
mv /etc/some-server/some-server.conf.new /etc/some-server/some-server.conf

如果您想在末尾添加該區塊(如果尚未存在),這仍然不太難:

awk '
    /^## end my-block$/ {skip=0}
    !skip {print}
    /^## start my-block$/ {skip=1; system("cat new-block-content") || exit(1)}
    END {print "## start my-block"; system("cat new-block-content") || exit(1); print "## end my-block"}
' </etc/some-server/some-server.conf >/etc/some-server/some-server.conf.new &&
mv /etc/some-server/some-server.conf.new /etc/some-server/some-server.conf

處理其他場景(例如存在開始註釋但不存在結束註釋、多個區塊…)會變得越來越困難。

相關內容