Hi Stack Overflow社区,
我有以下问题.
我调用了这个文件bad
,其中包含以下内容:
SPAM EATER PO BOX 5555 FAKE STREET
FOO BAR ìPO BOX 1234 LOLLERCOASTER VILLAGE
LOL MAN PO BOX 9876 NEXT DOOR
Run Code Online (Sandbox Code Playgroud)
我想从中删除非ascii字符(在第二个记录的第二列的开头),以便获得一个没有奇怪字符并且所有列都对齐的文件.另外,还有这一要求实现这一使用Perl的一个班轮 -所以,没有awk
,sed
或相似的命令都可以使用.我尝试了以下内容,但在第三列中缩短了一个空格:
$ perl -plne 's/[^[:ascii:]]//g' bad > bad.clean
$ cat bad.clean
SPAM EATER PO BOX 5555 FAKE STREET
FOO BAR PO BOX 1234 LOLLERCOASTER VILLAGE
LOL MAN PO BOX 9876 NEXT DOOR
Run Code Online (Sandbox Code Playgroud)
我也试过使用相同的单行,但这次用空格替换非ascii字符.在这种情况下,记录最后在第二列中有两个额外的空格,在第三列中有一个额外的空格:
$ perl -plne 's/[^[:ascii:]]/ /g' bad > bad.clean.space
$ cat bad.clean.space
SPAM EATER …
Run Code Online (Sandbox Code Playgroud) 我有一个Perl程序,它给了我以下输出:
Wide character in print at foo.pl line 139, <FILE> line 1.
Wide character in print at foo.pl line 139, <FILE> line 2.
Wide character in print at foo.pl line 139, <FILE> line 3.
Run Code Online (Sandbox Code Playgroud)
因为我不想添加:utf8
图层,我也不想关闭警告,我正在寻找一种方法来终止程序并退出错误代码如果出现如上所示的消息.
由于print
语句是抛出错误的那个,我试着or die
在print
语句旁边使用,但这没有帮助.例如>
print OUTPUT $_."\n" or die "Something wrong happened - $!";
Run Code Online (Sandbox Code Playgroud)
我想这不起作用,因为它print
并没有真正失败 - 它只是显示一条消息.
我有一个文件abc.txt,其中包含:
abc,byc
ccf
gyh
Run Code Online (Sandbox Code Playgroud)
我想将所有记录(以逗号分隔)放在一行中.
abc
byc
ccf
gyh
Run Code Online (Sandbox Code Playgroud)
请帮忙