如何使用 BATCH 为单词 abstract_ 的每个出现位置插入换行符

如何使用 BATCH 为单词 abstract_ 的每个出现位置插入换行符

我有一个需要使用批处理编辑的 xml。如何为单词的每个出现位置插入换行符抽象的_在整个文件中?

这是 xml 中的一行(9999999x.xml)

<related-object content-type="image.extract" object-type="image/jpeg" specific-use="data" xlink:href="99999999_abstract_ddd.jpg"/><related-object content-type="image.extract" object-type="image/jpeg" specific-use="data" xlink:href="99999988_abstract_ddd.jpg"/><related-object content-type="image.extract" object-type="image/jpeg" specific-use="data" xlink:href="99999977_abstract_ddd.jpg"/><related-object content-type="image.extract" object-type="image/jpeg" specific-use="data" xlink:href="99999966_abstract_ddd.jpg"/>

我希望自己看起来像......

<related-object content-type="image.extract" object-type="image/jpeg" specific-use="data" xlink:href="99999999_abstract_
ddd.jpg"/><related-object content-type="image.extract" object-type="image/jpeg" specific-use="data" xlink:href="99999988_abstract_
ded.jpg"/><related-object content-type="image.extract" object-type="image/jpeg" specific-use="data" xlink:href="99999977_abstract_
dfd.jpg"/><related-object content-type="image.extract" object-type="image/jpeg" specific-use="data" xlink:href="99999966_abstract_
dgd.jpg"/>

它不必覆盖文件,只需将其保存在另一个文本或临时文件中。

谢谢!

答案1

我见过批处理和 JavaScript 的混合体,它看起来像批处理,但实际上是 JavaScript 运行。jrepl.bat 作者:Dave Benham http://www.dostips.com/forum/viewtopic.php?f=3&t=6044

或者第三方程序,如 perl 或 sed。jcop 显示重新 sed。Sed 很老了,现在人们使用 perl。此链接显示如何将搜索和替换 sed 行转换为 perlPerl 用于在终端中与正则表达式进行匹配吗? 但是使用 sed 是可以的。Sed 逐行工作,因此在查找部分不支持 \n(即使“最新”版本也不支持)。但是 sed(除了 unxutils 上的旧版本)在替换部分支持它,这正是您所需要的。Perl 当然在查找或替换中支持它。

您可以从 gnuwin32 获取 sedhttp://gnuwin32.sourceforge.net/packages.html 在那里下载 sed,如果这样做,那么我建议也获取 gnuwin32 coreutils,以及任何你找到的你想要的其他东西。

unxutils 有一个旧版本的 sed,但我不建议这样做,而且 unxutils 拥有的旧版本 sed 是 GNU sed 3.02 版,不支持 \n,所以没有帮助。Windows SUA 上还有一个 sed,但它也不支持 \n,甚至没有说明它是什么版本。

因此,请从 gnuwin32 或 cygwin 或 MinGW 或 gow 获取 sed。而不是 SUA 或 unxutils。

答案2

sed 's/abstract_/abstract_\n/g' 9999999x.xml > 9999999xa.xml

sed是一个奇怪的unix编辑器,很少有人用它,除了进行在线编辑。它安装在所有发行版中。

在这种情况下,它获取输入文件,然后应用引号之间的命令,该命令告诉编辑器用 进行替换abstract_abstract_\n告诉gsed整个文件执行此操作。

它将重定向到的结果键入stdout9999999xa.xml。不要重定向到与输入相同的文件,因为这会导致不可预测的结果。

编辑:我们都沉迷于屏幕编辑器,它可以显示文本,您可以移动并编辑您想要的内容。

sed有所不同 - 您必须事先知道要将哪些命令应用于文件,然后将它们写入“脚本”文件,或者在命令行本身中包含命令。然后sed将以(大多数)逐行方式将这些命令应用于输入文件。

“内联编辑器”这个名称可能是因为您可以sed在命令行中插入并使用重定向使其成为进程的一部分...一个示例(可以优化):

cat some.txt | sed 's/abstract_/abstract_\n/g' | sort

因此,文本从 流经cat,流向sedsort这被称为管道。sed出于同样的原因,有时也称为流编辑器。看看sed手册简介

相关内容