所以我有下一个文件:
user@host:sandbox$ cat readfile.txt
READ LINE
E
A
D
T
E
X
T
和
user@host:sandbox$ cat template.txt
set variable = blablabla
我需要一个汇集以下两个命令的命令:
user@host:sandbox$ sed -e '/set variable/r readfile.txt' template.txt > output.txt
user@host:sandbox$ cat output.txt
set variable = blablabla
READ LINE
E
A
D
T
E
X
T
user@host:sandbox$ sed -e 's/READ LINE/BLABLABLA/' output.txt > output.txt.m
user@host:sandbox$ cat output.txt.m
set variable = blablabla
BLABLABLA
E
A
D
T
E
X
T
类似的东西(但这不起作用):
user@host:sandbox$ sed -e '/set variable/{r readfile.txt' -e 's/READ LINE/BLABLABLA/}' template.txt > output.txt
SED的大师,我需要帮助!
答案 0 :(得分:1)
sed手册说“读取接收地址范围的命令”中没有包含的读取文件命令 因此,下一个解决方案是正确的:
user@host:sandbox$ sed -e '/set variable/r readfile.txt' template.txt > output.txt
user@host:sandbox$ sed -i 's/READ LINE/BLABLABLA/' output.txt
答案 1 :(得分:0)
如果您只想附加文件,可以使用cat
本身。
cat template.txt readfile.txt > output.txt
如果您需要一个或多个特定行,您可以使用带有进程替换的sed
来选择行(在Bash中)。
e.g。从template.txt中取第3-5行和第7行并附加readfile.txt:
cat <(sed -n '3,5p;7p' template.txt) readfile.txt > output.txt
答案 2 :(得分:0)
这可能适合你(GNU sed):
sed 's/READ LINE/BLABLABLA/' readfile.txt |
sed '/set variable/r /dev/stdin' template.txt > output.txt
首先编辑readfile.txt
并通过管道将此文件传递给编辑template.txt
N.B。无法处理读取(r
)到另一个文件的文件,因为在处理完sed命令后它直接传递给stdout。与使用=
命令的行号输出类似。