当它与 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>]
匹配 <
、/
、z
、o
、n
、[=17= 以外的任何单个字符] 和 >
,它不代表 *除 </zone>
之外的任何文本。您需要在这里使用否定前瞻,(?!</zone>)
如果直接跟在 </zone>
之后,">
匹配将失败
^M
是 carriage returns,CR 符号,您可以在将文件传递给 perl
,或者只是用单独的替换命令删除它们,s/\r//g
.
您可以使用
perl -pe 's/\r//g;s{(">)(?!</zone>)}{</zone>}g' $travail_dir/zones.txt > $travail_dir/ys.txt
当它不匹配时,我如何删除每行的和处的“^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>]
匹配<
、/
、z
、o
、n
、[=17= 以外的任何单个字符] 和>
,它不代表 *除</zone>
之外的任何文本。您需要在这里使用否定前瞻,(?!</zone>)
如果直接跟在</zone>
之后,^M
是 carriage returns,CR 符号,您可以在将文件传递给perl
,或者只是用单独的替换命令删除它们,s/\r//g
.
">
匹配将失败
您可以使用
perl -pe 's/\r//g;s{(">)(?!</zone>)}{</zone>}g' $travail_dir/zones.txt > $travail_dir/ys.txt