从Perl中的字符串中删除CRLF(0D 0A)

HeH*_*nts 7 regex perl

我有一个Perl脚本在Linux上使用XML文件,偶尔在某些节点值中有CRLF(Hex 0D0A,Dos新行).

生成XML文件的系统将它们全部写为一行,看起来好像它偶尔会判断它太长并将CRLF写入其中一个数据元素.不幸的是,我无法对提供系统做些什么.

我只需要在处理它之前从字符串中删除它们.

我已经尝试使用perl char类,十六进制值,各种类型的各种正则表达式替换,似乎没有任何工作.

我甚至在处理之前通过dos2unix运行输入文件,我仍然无法摆脱错误的字符.

有没有人有任何想法?

非常感谢,

HeH*_*nts 17

典型的,经过大约2个小时的战斗,我在提出问题的5分钟内解决了它.

$output =~ s/[\x0A\x0D]//g; 
Run Code Online (Sandbox Code Playgroud)

终于明白了.

  • 请记住,这是删除字符`\ r`和`\n`的所有实例而不是字符串`\ r \n`(只是包含`\ r`或`\n`可能是您需要的有效值在其他地方) (4认同)
  • Rubberduck效果.它永远不会失败!:) (3认同)

Gre*_*con 6

$output =~ tr/\x{d}\x{a}//d;
Run Code Online (Sandbox Code Playgroud)

这些都是空格字符,所以如果终结符总是在最后,你可以右键修剪

$output =~ s/\s+\z//;
Run Code Online (Sandbox Code Playgroud)