如何使用 sed 和 cat 将多行从一个文件添加到另一个文件
How to use sed and cat to add multi lines from one file to another
如何使用 cat
和 sed
从文件中读取数据并将其插入到已知行下的另一个文件中?
例如,我有一个名为 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).
如何使用 cat
和 sed
从文件中读取数据并将其插入到已知行下的另一个文件中?
例如,我有一个名为 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).