Perl swap命令不使用';似乎无法使用输出重定向
我的输入是:Perl swap命令不使用';似乎无法使用输出重定向,perl,unix,solaris,Perl,Unix,Solaris,我的输入是: Grull^Zn Hernand^Zz 其中^Z解析为控制字符\x1a(通过文件上的od-x验证) 当我运行以下Perl命令时: perl -pe s/\x1a//g foo.txt 我得到输出:gruln Hernandz 正如所料。但是,当我将其重定向到一个文件时 perl -pe s/\x1a//g foo.txt > out.txt 这些文件是相同的,如下所示 diff -c out.txt foo.txt No differences encounter
Grull^Zn Hernand^Zz
其中^Z解析为控制字符\x1a
(通过文件上的od-x
验证)
当我运行以下Perl命令时:
perl -pe s/\x1a//g foo.txt
我得到输出:gruln Hernandz
正如所料。但是,当我将其重定向到一个文件时
perl -pe s/\x1a//g foo.txt > out.txt
这些文件是相同的,如下所示
diff -c out.txt foo.txt
No differences encountered
我如何才能强制此行为按预期工作?我不知道您是如何确定第一个版本是否工作的,但它不适合我 您需要在正则表达式中转义反斜杠,或者引用它(引用它更常见)
$hextump-C输入
00000000 61 62 63 1a 64 65 66 1a 67 68 69 0a | abc.def.ghi|
$perl-pes/\x1a//g输入| hextump-C
00000000 61 62 63 1a 64 65 66 1a 67 68 69 0a | abc.def.ghi|
$perl-pe s/\\x1a//g输入| hextump-C
00000000 61 62 63 64 65 66 67 68 69 0a | abcdefghi|
$perl-pe's/\x1a//g'输入| hextump-C
00000000 61 62 63 64 65 66 67 68 69 0a | abcdefghi|
我不认为
perl -pe s/\x1a//g foo.txt
做你认为它能做的事。在任何健全的solaris shell中,未引用的\x
被视为与x
相同,并且您运行的是与
perl -pe s/x1a//g foo.txt
您可以通过执行来测试
echo s/\x1a//g
看看有什么传递到外壳上。你也可以试试
perl -pe s/\x1a//g foo.txt | od -c
查看是否确实从输入中删除了控制字符
正确的做法是将单行脚本括在单引号中:
perl -pe 's/\x1a//g' foo.txt > out.txt
我最终所做的(尽管我发现mob的解决方案也有效)不是输入
\x1a
,而是按住Ctrl
,然后按下v,z
这样做的好处是可读性更强 那么,这是bash在将行传递到perl之前解释它认为该行应该是什么的实例吗?单引号起作用,使用CTRL+V,Z也起作用