Bash

如何在 bash 腳本的指定行號之後或之間插入變數的內容?

  • March 15, 2022

我的腳本通過在第 4 行之後插入一些設置作為儲存在變數中的文本塊來修改配置文件。我知道 MacOS 的 sed 版本存在一些不兼容性,所以我安裝了 GNU 版本,但我不知道執行的是哪個 SED。

#!/bin/bash

SCRIPT_LINES=“for all “vars”;\find Runtime (“stm32”) use “c++”;\n\n” sed -i’’ “4i$SCRIPT_LINES” environment.cfg

SED 的語法是荒謬的,我想要一個替代方案,但似乎沒有一個好的替代方案。如何從 bash 腳本將變數中包含的文本塊插入到另一個文件中?

如果您發現 sed 的語法無意義,您可以通過多種不同的方式在某個位置插入一行。一種很容易理解的方法:

( head -n 4 environment.cfg && echo "$script_lines" && tail -n +5 environment.cfg ) > /tmp/tmp-environment.cfg
mv /tmp/tmp-environment.cfg environment.cfg

即,回顯文件的前四行,然後回顯變數,然後從第 5 行開始列印所有內容。將結果儲存在臨時文件中,然後將其複製過來。

這樣就可以避免sed。☺

但我認為使用 GNU sed,它只是

sed -i "4a $script_lines" environment.cfg

使用 OS X sed:

sed -i '' "4a $script_lines" environment.cfg

告訴你正在執行什麼版本:

sed --version

引用自:https://unix.stackexchange.com/questions/694423