Perl oneliner + 줄 끝에 VALUE 인쇄

Perl oneliner + 줄 끝에 VALUE 인쇄

다음 Perl oneliner는 정확한 $CURRENT_VERSION일치를 확인 $NEW_VERSION하고 일치하는 경우 이를 인쇄합니다.

예:

CURRENT_VERSION=223.3.12.4.5.3
NEW_VERSION=223.3.12.4.5.3
DATE=17.3.2013
echo $CURRENT_VERSION  | \
  perl -ne 'BEGIN { $STR = shift(@ARGV); } print if /\Q$STR\E/; ' $NEW_VERSION 
223.3.12.4.5.3

$DATE줄 끝에 값을 인쇄 하려면 Perl One 라이너에 무엇을 추가해야 합니까 ?

예를 들어:

CURRENT_VERSION=223.3.12.4.5.3
NEW_VERSION=223.3.12.4.5.3
DATE=17.3.2013
echo $CURRENT_VERSION  | \
  perl -ne'BEGIN { $STR = shift(@ARGV); } print if /\Q$STR\E/; ' \
  $NEW_VERSION < add syntax to  print $DATE > 
223.3.12.4.5.3  17.3.2013

답변1

perl -F= -lane '$v{$F[0]}=$F[1]; if ($F[0] eq "DATE") {$v{CURRENT_VERSION} eq $v{NEW_VERSION} ? print $v{NEW_VERSION}, " ", $v{DATE} : exit(1)}'

또는 여전히 한 줄이지만 읽을 수 있습니다.

perl -F= -lane '
    $v{$F[0]} = $F[1];
    if ($F[0] eq "DATE") {
        $v{CURRENT_VERSION} eq $v{NEW_VERSION} 
            ? print $v{NEW_VERSION}, " ", $v{DATE} 
            : exit(1)
    }' << END
CURRENT_VERSION=223.3.12.4.5.3
NEW_VERSION=223.3.12.4.5.3
DATE=17.3.2013
END

산출

223.3.12.4.5.3 17.3.2013

답변2

이것은 작동합니다:

echo $CURRENT_VERSION | \
    perl -e '($nv,$d)=(shift,shift); /\Q$nv/ and chomp,print "$_ $d\n" while <>' $NEW_VERSION $DATE

그러나 $CURRENT_VERSION도 매개변수 중 하나로 포함하는 것이 좋습니다.

perl -e '($nv,$d,$cv)=@ARGV; $cv=~/\Q$nv/ and print "$cv $d\n"' $NEW_VERSION $DATE $CURRENT_VERSION

관련 정보