SED:从文件中读取并在之后替换

时间:2015-10-16 13:54:54

标签: sed

所以我有下一个文件:

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的大师,我需要帮助!

3 个答案:

答案 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

的第二个sed命令

N.B。无法处理读取(r)到另一个文件的文件,因为在处理完sed命令后它直接传递给stdout。与使用=命令的行号输出类似。