想了解使用 sed 命令将文本从一个文件插入到另一个文件的正确方法吗?

想了解使用 sed 命令将文本从一个文件插入到另一个文件的正确方法吗?

由于本站在展示时出现一些问题。我使用“{”而不是“<”。

这是我的 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

这是未经测试且可怕的,我建议使用适当的编程语言。

相关内容