2

こんにちは、cisco ルーターに接続する perl スクリプトを持っています。

このように分割されていない場合の実際の出力

int デスクを表示
インターフェイス ステータス プロトコルの説明
Gi1/0/0 up up TRUNK ME-A-JKT-TAN 5/2/1 u/ Service VPN-IP (QoS対応)
Gi1/0/0.23 アップ アップ VPNIP TIGARAKSA SATRIA BSD,TANGERANG CID 20490023 TENOSS 47086151509200818077

次に、このようにこのスクリプトにコードを入れます

my @output1 = split(/\s{2,}/, $output);

foreach my $output2 (@output1) {
 $output3="$output2%";
 my @output4 = split(/\s{2,}/, $output3);
  foreach my $output5 (@output4) {
   print "$output5#"
 }
}

なぜこのように印刷するのか

int デスクを表示
インターフェイス%#ステータス%#プロトコルの説明
Gi1/0/0%#up%#up%#TRUNK ME-A-JKT-TAN 5/2/1 u/ Service VPN-IP (QoS対応)
Gi1/0/0.23%#up%#up%#VPNIP TIGARAKSA SATRIA BSD,TANGERANG CID 20490023 TENOSS 47086151509200818077

私はこのように印刷したい

show int desc#Interface%Status%Protocol%Description#Gi1/0/0%up%up%TRUNK ME-A-JKT-TAN 5/2/1 u/ Service VPN-IP (Support QoS)#Gi1/0/ 0.23%up%up%VPNIP TIGARAKSA SATRIA BSD,TANGERANG CID 20490023 TENOSS 47086151509200818077#

% で区切られた 2 つ以上のスペースが必要で、/n は # で区切られています

4

2 に答える 2

2

おそらく、あなたがchomp自分のセリフを編集していないからですか?また、これらのネストされたループを使用して、各行にと の両方#を追加しています。あなたの 2 番目の分割ステートメントは最初のステートメントと同じですが、それが何かを行うと考える理由は何ですか?%for

空白と改行を置き換えるだけなら、なぜそれをしないのですか?

$output =~ s/\n+/#/g;
$output =~ s/\s{2,}/%/g;
print $output;

$output2また、変数に , $output3...という名前を付けるのは恐ろしい習慣であることを知っておく必要があります$output5

于 2013-07-01T10:29:55.343 に答える