Answers:
您要做的是删除SUBSTITUTETHIS
文件中出现的所有位置(而不是出现在该行的其余部分),并temp.TXT
在该行下方插入内容。如果SUBSTITUTETHIS
一行上出现多次,则仅删除第一个匹配项,并且仅temp.TXT
添加一个副本。
如果要在SUBSTITUTETHIS
显示时替换整行,请使用d
命令。由于您需要同时进行比赛r
和d
比赛,因此将它们放在支撑组中。
sed -e '/SUBSTITUTETHIS/ {' -e 'r temp.TXT' -e 'd' -e '}' -i devel.txt
某些sed实现使您可以使用分号来分隔命令,并完全省略括号之间的分隔符,但是您仍然需要换行符来终止r
命令的参数:
sed -e '/SUBSTITUTETHIS/ {r temp.TXT
d}' -i devel.txt
如果要替换SUBSTITUTETHIS
文件的内容,但保留在线之前和之后的内容,则更为复杂。最简单的方法是将文件内容包含在sed命令中;请注意,您必须正确引用其内容。
sed -e "s/SUBSTITUTETHIS/$(<temp.TXT sed -e 's/[\&/]/\\&/g' -e 's/$/\\n/' | tr -d '\n')/g" -i devel.txt
或使用Perl。这很短,但cat
每次替换运行一次:
perl -pe 's/SUBSTITUTETHIS/`cat temp.TXT`/ge' -i devel.txt
要在脚本启动时一次读取文件,并避免依赖于shell命令:
perl -MFile::Slurp -pe 'BEGIN {$r = read_file("temp.TXT"); chomp($r)}
s/SUBSTITUTETHIS/$r/ge' -i devel.txt
(为便于阅读,以两行显示,但您可以省略换行符)。如果文件名是变量,为避免引用问题,请通过环境变量将其传递给脚本:
replacement_file=temp.TXT perl -MFile::Slurp -pe 'BEGIN {$r = read_file($replacement_file); chomp($r)}
s/SUBSTITUTETHIS/$r/ge' -i devel.txt
cat temp.txt
我可以做的事情cat ${variable}
?
-0777
开关将整个文件插入到文件中,然后执行常规操作open
:perl -0777 -pe 'BEGIN {open F, q(temp.TXT); $r=<F>; chomp($r)} s/SUBSTITUTETHIS/$r/ge' -i devel.txt
r temp.TXT
使用“ BEGIN temp.TXT”,“ END temp.TXX”之类的消息进行包装
a
(添加)命令。grymoire.com/Unix/Sed.html#uh-36