繁体   English   中英

如何在结尾处删除特殊字符?

[英]How do I remove the special character at the end?

我的程序中包含以下代码,该代码旨在返回Debian安装的版本和Subversion。 Shell的输出被变量读取并进行解析,并形成一个字符串。

#!/usr/bin/perl
use warnings;
use strict;
use Scalar::Util qw(looks_like_number);
chomp(my $distver=`cat /etc/issue`);
$distver =~ s/\\n//g;
$distver =~ s/\\/./g;
$distver =~ s/ //g;
our $enpos=-1;
for ( my $i=0; $i <length($distver); $i++ ) {
    if (looks_like_number(substr($distver, $i, 1))) {
        if ( $enpos == -1 ) { $enpos = $i; }
    }
}
print "Distro:".substr($distver, 0, $enpos)."".substr($distver, $enpos);
my $subver=substr($distver, $enpos);
$subver =~ s/\\n//g;
$subver =~ s/\\r//g;
$subver =~ s/\\f//g;
print "Subversion:".$subver."\n";

上面的输出是:

root@der:~# ./distr.pl
Distro:DebianGNU/Linux7.l
Subversion:7.l

在输出中,在7.1之后的末尾还有一个新行。 我尝试了上面的正则表达式,以尝试最后删除换行符,返回符和换页符,但是失败了。

cat /etc/issue的输出是this

我最初尝试用chomp从输出中删除换行符,然后发现这样做不是删除结尾的换行符:

print "Distro:".substr($distver, 0, $enpos)."".substr($distver, $enpos);
my $subver=chomp(substr($distver, $enpos));
print "Subversion:".$subver."\n";

输出:

root@der:~# ./distr.pl
Distro:DebianGNU/Linux7.l
Subversion:1
root@der:~#

那么为什么会这样呢? 为什么排骨(和排骨)比换行符更重要? 为什么要输出这个额外的换行符?

chomp会在适当位置更改字符串,它不会返回更改后的字符串,但会删除已删除的字符数。

要删除换行符,请使用s/\\n//g ,双反斜杠与反斜杠匹配。

像这样尝试:

$ distver =〜s / \\ n。* // s;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM