由于本站在展示时出现一些问题。我使用“{”而不是“<”。
这是我的 sed 命令:
sed 's/{head/*backbutton_and_scroller_script.txt*{head/' report.usc20.txt
我想将“backbutton_and_scroller_script.txt”内部的文本信息插入到“report.usc20.txt”文件的 head 标记前面。如何在 sed 命令中正确指向 backbutton_and_scroller_script.txt 文件?我当前的代码显示文件名backbutton_and_scroller_script.txt在report.usc20.txt 内的head 标记前面,而不是backbutton_and_scroller_script.txt 内的文本。
答案1
首先,您似乎对sed
工作原理存在一些误解。sed
没有“将文件重定向到模式的这一部分”操作符。如果您可以重定向其中的任何内容,则必须转义输入文本中的任何特殊字符,以避免弄乱模式(这包括点和斜杠等字符,因此并不是不常见的字符)。并调整-i
您需要使用选项的文件sed
。
这可能不是您想听到的,但sed
对于这项工作来说,这是错误的工具。你能做的最好的事情就是获得一个工具或库明白这种类型的标记(例如 XSLT 或 Python/Java/Ruby 库)。
如果您使用某种完全自定义的语言,您可以使用可怕的 hack 来读取文件,直到第一次出现{head
:
file="$(<report.usc20.txt)"
start="${file%%\{head*}"
,获取文件的相应其余部分:
end="${file#*\{head}"
最后将所有碎片拼凑在一起:
printf '%s%s{head%s' "$start" "$(<backbutton_and_scroller_script.txt)" "$end" > report.usc20.txt
这是未经测试且可怕的,我建议使用适当的编程语言。