使用 sed 将行替换为文件内容
Replace line with file content using sed
我正在尝试用另一个文件的内容替换文件中的一行,并打印结果。
#!/bin/sh
set -e
echo "a
b
c" > template.txt
echo "Hello, World!" > foo.txt
sed -e '/b/ {
d
r /dev/stdin
}' "template.txt" < "foo.txt"
不幸的是,这导致
a
c
当我删除 sed 脚本中的 d
行时,我可以得到
a
b
Hello, World
c
如何删除 b
并保留 Hello, World
?
谢谢 ToxicFrog 的回答。显然,d
的意思是“清除模式 space 并立即进入下一行”,所以我需要这些命令的顺序相反。 r
立即将文件内容附加到输出,而不是将其读入模式 space.
sed -e '/b/ {
r /dev/stdin
d
}' "template.txt" < "foo.txt"
这可能适合您 (GNU sed):
sed '/b/cHello World!' file
将包含 b
的任何行更改 (c
) 为 Hello World!
。
我正在尝试用另一个文件的内容替换文件中的一行,并打印结果。
#!/bin/sh
set -e
echo "a
b
c" > template.txt
echo "Hello, World!" > foo.txt
sed -e '/b/ {
d
r /dev/stdin
}' "template.txt" < "foo.txt"
不幸的是,这导致
a
c
当我删除 sed 脚本中的 d
行时,我可以得到
a
b
Hello, World
c
如何删除 b
并保留 Hello, World
?
谢谢 ToxicFrog 的回答。显然,d
的意思是“清除模式 space 并立即进入下一行”,所以我需要这些命令的顺序相反。 r
立即将文件内容附加到输出,而不是将其读入模式 space.
sed -e '/b/ {
r /dev/stdin
d
}' "template.txt" < "foo.txt"
这可能适合您 (GNU sed):
sed '/b/cHello World!' file
将包含 b
的任何行更改 (c
) 为 Hello World!
。