我在我的程序中有以下代碼,其目的是返回安裝的Debian的版本和顛覆。 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";
的上述的輸出是:
[email protected]:~# ./distr.pl
Distro:DebianGNU/Linux7.l
Subversion:7.l
在輸出中,有在端部的附加的換行,7.1後。我嘗試過上述正則表達式,試圖在最後刪除換行符,返回並換行形式,但失敗了。
cat /etc/issue
的輸出是this。
我最初試圖格格從輸出除去換行,發現不是刪除結束換行符,它這樣做:
print "Distro:".substr($distver, 0, $enpos)."".substr($distver, $enpos);
my $subver=chomp(substr($distver, $enpos));
print "Subversion:".$subver."\n";
輸出:
[email protected]:~# ./distr.pl
Distro:DebianGNU/Linux7.l
Subversion:1
[email protected]:~#
那麼,爲什麼會出現這種情況?爲什麼chomp(和chop)會比新行更多地切斷?爲什麼這個額外的換行符被輸出?
你能告訴我爲什麼正則表達式不起作用嗎? – Droidzone
你可以發佈/ etc/issue的內容嗎? – choroba
http://pastebin.com/T3HP6hD8 – Droidzone