如何将文件的内容插入到bash中的字符串中

Wil*_*ett 3 grep bash sed awk string

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

line 1
line 2
Run Code Online (Sandbox Code Playgroud)

我想这样做 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
Run Code Online (Sandbox Code Playgroud)

我尝试了引号和转义字符的各种组合,但似乎没有任何效果。在我的特定用例中,字符串将是一个 bash 变量,所以如果有一些深奥的东西可以让这变得更容易,那么最好知道。

我现在所做的工作是将字符串写入文件,使用 grep 找到我想在后面追加的行,然后使用 head、printf 和 tail 的组合将文件压缩在一起。似乎我不应该将文本写入文件来完成这项工作。

gle*_*man 5

请注意,您不必事先读取文件,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
Run Code Online (Sandbox Code Playgroud)