小编jim*_*-cl的帖子

如何删除非ascii字符并在非ascii字符使用Perl单行的字段中添加空格?

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)

regex formatting perl

6
推荐指数
1
解决办法
5275
查看次数

如何在出现"X行Y处打印宽字符"消息时立即退出Perl程序?

我有一个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 dieprint语句旁边使用,但这没有帮助.例如>

print OUTPUT $_."\n" or die "Something wrong happened - $!";
Run Code Online (Sandbox Code Playgroud)

我想这不起作用,因为它print并没有真正失败 - 它只是显示一条消息.

unicode perl

2
推荐指数
1
解决办法
228
查看次数

如何将所有分隔的记录放在unix中的一列中

我有一个文件abc.txt,其中包含:

abc,byc
ccf
gyh
Run Code Online (Sandbox Code Playgroud)

我想将所有记录(以逗号分隔)放在一行中.

abc
byc
ccf
gyh
Run Code Online (Sandbox Code Playgroud)

请帮忙

unix awk sed sh

1
推荐指数
1
解决办法
42
查看次数

标签 统计

perl ×2

awk ×1

formatting ×1

regex ×1

sed ×1

sh ×1

unicode ×1

unix ×1