我有一个需要使用批处理编辑的 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
告诉g
对sed
整个文件执行此操作。
它将重定向到的结果键入stdout
到9999999xa.xml
。不要重定向到与输入相同的文件,因为这会导致不可预测的结果。
编辑:我们都沉迷于屏幕编辑器,它可以显示文本,您可以移动并编辑您想要的内容。
sed
有所不同 - 您必须事先知道要将哪些命令应用于文件,然后将它们写入“脚本”文件,或者在命令行本身中包含命令。然后sed
将以(大多数)逐行方式将这些命令应用于输入文件。
“内联编辑器”这个名称可能是因为您可以sed
在命令行中插入并使用重定向使其成为进程的一部分...一个示例(可以优化):
cat some.txt | sed 's/abstract_/abstract_\n/g' | sort
因此,文本从 流经cat
,流向sed
,sort
这被称为管道。sed
出于同样的原因,有时也称为流编辑器。看看sed
手册简介。