给出的是input_file
:
1
2
START
foo
END
3
Run Code Online (Sandbox Code Playgroud)
目标START
是将 include ...块内的内容替换END
为来自标准输入的多行内容:
1
2
hello
world
3
Run Code Online (Sandbox Code Playgroud)
我尝试过的:
sed '/^START$/,/^END$/d;r /dev/stdin' input_file <<EOF
hello
world
EOF
Run Code Online (Sandbox Code Playgroud)
不幸的是导致
1
hello
world
2
3
Run Code Online (Sandbox Code Playgroud)
我猜想是在第一行之后r /dev/stdin
按顺序调用的,并且只是在第一行之后附加。 /^START$/,/^END$/d;
第二次尝试:
sed '/^START$/,/^END$/{d;r /dev/stdin
}' input_file <<EOF
hello
world
EOF
Run Code Online (Sandbox Code Playgroud)
印刷
1
2
3
Run Code Online (Sandbox Code Playgroud)
为什么上述命令(尤其是最后一个命令)会打印错误的结果?我该如何调整这些?