如何使用 sed 和 cat 将多行从一个文件添加到另一个文件

How to use sed and cat to add multi lines from one file to another

如何使用 catsed 从文件中读取数据并将其插入到已知行下的另一个文件中?

例如,我有一个名为 script1.txt 的文件,其中包含几百行,其中一行的值为 "COMMANDS="commands"

如果我想使用sed在它下面插入一行,我可以简单地使用sed作为下面的命令。

sed -i '/^COMMANDS=.*/a NEW LINE HERE' script1.txt

但是如果我想在文件中插入多行和这些行,并且这些行每隔几个小时更改一次..我该怎么做?

我试过:

DATA=$(cat data.txt)

sed -i '/^COMMANDS=.*/a '$DATA'' script1.txt

我收到以下错误消息。

sed: -e expression #1, char 1: unknown command: `"'

除了 sed 之外,还有其他方法可以将文件中的数据毫无问题地插入到已知行下吗?

这可能适合您 (GNU sed):

sed -i '/^COMMANDS=/r dataFile' file

这会将文件 dataFile 的内容追加到行开头 COMMANDS= 之后并更新 file

如果您要附加的数据是 multi-line,您可能希望将换行符替换为 \n

#!/bin/sh
DATA="$(awk '{gsub(/[]\/$*.^&[]/, "\\&");printf (FNR>1)?"\n%s":"%s",[=10=]}END{print ""}' data.txt)"
sed -i -e '/^COMMANDS=.*/a\' -e "$DATA" script1.txt

此处 awk 命令转义 sed 特殊字符(对于基本正则表达式),然后在第一行打印 "%s",在其他行打印 "\n%s"。最后打印了一个换行符,但它有点毫无意义,因为 $() 无论如何都会剥离它。

sed 命令几乎相同,但使用了多个表达式,相当于 multi-line sed 脚本(a text sed 替代语法可能表现得很奇怪前导 spaces/backslashes).