Linux

perl 一行 + 在行尾列印 VALUE

  • March 17, 2013

下面的 perl 單行檢查是否完全$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

我需要在 perl 一行中添加什麼來列印$DATE行尾的值?

例如:

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
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

這應該有效:

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

引用自:https://unix.stackexchange.com/questions/68224