내 프로그램에 데비안의 버전과 서브 버전을 설치하는 다음 코드가 있습니다. 셸의 출력은 변수에 의해 읽히고 구문 분석되고 문자열이 형성됩니다.끝에 특수 문자를 어떻게 제거합니까?
#!/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 이후가있다. 위의 regexes를 시도해 보았습니다. 줄 바꿈을 제거하고 끝에서 피드 문자를 반환하지만 실패했습니다.
의 출력은 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