【问题标题】:Perl search and replacePerl 搜索和替换
【发布时间】:2019-05-05 22:00:05
【问题描述】:

我正在尝试在文件中搜索一些字符串并使用 perl 替换它们:

perl -pe "s/filename/$FNAME/" Header.xml > $HDIR/$FNAME.xml

如何搜索和替换多个字符串,因为添加另一个命令只会覆盖输出文件:

perl -pe "s/RBRef/$REF/" HeaderRBRS.xml > $HDIR/$FNAME.xml
perl -pe "s/MessageIdentifier/$MessageIdentifier/" HeaderRBRS.xml > $HDIR/$FNAME.xml
perl -pe "s/FileDigestValue/$digestNr/" HeaderRBRS.xml > $HDIR/$FNAME.xml
perl -pe "s/filename/$FNAME/" HeaderRBRS.xml > $HDIR/$FNAME.xml

在最后一种情况下,每次只会执行perl -pe "s/filename/$FNAME/" HeaderRBRS.xml > $HDIR/$FNAME.xml

提前致谢。

【问题讨论】:

  • 您应该编写一个 perl 脚本并传入一个字符串数组以进行搜索和替换。
  • 您应该使用适当的库来处理 XML 文件。
  • 另外,通过使用双引号,您可以从 shell 变量构建 Perl 代码。如果变量包含斜杠,代码将中断。使用 Perl 变量会更好,因为它们是真实变量,而不仅仅是扩展宏。
  • 什么库? @choroba
  • 我是XML::LibXML的粉丝,但XML::Twig也不错。

标签: linux bash perl search replace


【解决方案1】:

-e 之后将所有替换作为一个参数传递。用分号分隔它们;

perl -pe "s/filename/$FNAME/;s/RBRef/$REF/;..." infile > outfile

【讨论】:

  • 谢谢,它正在工作。如果变量 $FNAME 中包含这个字符,你知道如何转义 $ 符号吗?
  • @MihaiDumitru 是的,在bash 中写${FNAME//$/\\$} 而不是$FNAME。另请参阅stackoverflow.com/a/16951928/6770384 了解更通用的引用机制。
  • 谢谢你,你是救命恩人!
猜你喜欢
  • 1970-01-01
  • 2021-01-31
  • 2018-08-21
  • 2017-01-05
  • 1970-01-01
  • 2015-08-24
  • 2015-02-20
  • 2017-01-03
  • 2015-10-03
相关资源
最近更新 更多