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

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

我想将多行文本文件的内容附加到字符串中的特定行之后。例如,如果文件文件.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 的组合将文件压缩在一起。看来我不必将文本写入文件来完成这项工作。

答案1

请注意,您不必事先读取该文件,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

答案2

您需要将变量中的换行符替换为\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"

答案3

你想做这样的事情吗?:

LINE1=`cat test.file | sed '1!d'`
LINE2=`cat test.file | sed '2!d'`
LINE3=`cat test.file | sed '3!d'`
LINE4=`cat test.file | sed '4!d'`

echo $LINE1
echo $LINE2

相关内容