Bash
如何將文件的內容插入到bash中的字元串中
我想在字元串中的特定行之後附加多行文本文件的內容。例如,如果文件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"