Bash

如何將文件的內容插入到bash中的字元串中

  • January 20, 2015

我想在字元串中的特定行之後附加多行文本文件的內容。例如,如果文件file.txt包含

line 1
line 2

我想做這樣的事情printf "s1random stuff\ns2 more random stuff\ns1 final random stuff\n" | sed "/(^s2.+)/a $(<file.txt)"

要獲得輸出:

s1 random stuff
s2 more random stuff
line 1
line 2
s1 final random stuff

我嘗試了各種引號和轉義字元的組合,但似乎沒有任何效果。在我的特定案例中,字元串將是一個 bash 變數,所以如果有一些深奧的東西可以讓這變得更容易,最好知道。

我現在的工作是將字元串寫入文件,使用 grep 查找我想在之後附加的行,然後使用 head、printf 和 tail 的組合將文件壓縮在一起。似乎我不應該將文本寫入文件來完成這項工作。

請注意,您不必事先讀取文件,sed 具有可以讀取文件r命令

$ printf -v var "%s\n" "s1random stuff" "s2 more random stuff" "s1 final random stuff"

$ echo "$var"
s1random stuff
s2 more random stuff
s1 final random stuff

$ sed '/^s2/r file.txt' <<< "$var"
s1random stuff
s2 more random stuff
line 1
line 2
s1 final random stuff

您需要將變數中的換行符替換為\newline. 並且要插入的文本需要以\newline.

var=$(<file.txt)
# Put backslash before newlines in $var
var=${var//
/\\
}
printf "s1random stuff\ns2 more random stuff\ns1 final random stuff\n" | sed "/^s2/a \
$var"

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