次の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)}'
または、まだ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もパラメータの1つとして含めることをお勧めします。
perl -e '($nv,$d,$cv)=@ARGV; $cv=~/\Q$nv/ and print "$cv $d\n"' $NEW_VERSION $DATE $CURRENT_VERSION