当它与 Perl 不匹配时,删除每行的和处的“^M”

Remove the "^M" at the and of each line when its doesnt match Perl

当它不匹配时,我如何删除每行的和处的“^M”?命令是:

perl -pe 's{(">)[^</zone>]}{</zone>}g' $travail_dir/zones.txt >$travail_dir/ys.txt

我在 ys.txt 中得到了这个:

<zone^M
numero_page="005"></zone>^M
<zone^M
id_zone="2"^M
numero_page="005"></zone>

如何修改我的命令以获得没有“^M”的预期结果?

这里有两件事:

  • [^</zone>] 匹配 </zon、[=17= 以外的任何单个字符] 和 >,它不代表 *除 </zone> 之外的任何文本。您需要在这里使用否定前瞻,(?!</zone>) 如果直接跟在 </zone>
  • 之后,"> 匹配将失败
  • ^Mcarriage returns,CR 符号,您可以在将文件传递给 perl,或者只是用单独的替换命令删除它们,s/\r//g.

您可以使用

perl -pe 's/\r//g;s{(">)(?!</zone>)}{</zone>}g' $travail_dir/zones.txt > $travail_dir/ys.txt