awk随机打印" e"那不是字符串

时间:2017-08-21 16:41:01

标签: bash awk tmsh

我想从字符串中提取ip和端口。

字符串看起来像这样。

目标x.x.x.x:yyyy

其中x是ip,y是port

10.10.10.10
10.10.10.10:https
declare -a commandout='([0]="    destination 10.10.10.10:https")'
12.12.12.12e
12.12.12.12:https
declare -a commandout='([0]="    destination 12.12.12.12:https")'
由于某种原因,awk正在随机打印" e"在ip地址之后。但它似乎只是在2之后才这样做。

    declare -p vipip
    vipip=$(tmsh list ltm virtual $vip | grep destination | awk 'BEGIN{}{print $2}' | awk 'BEGIN{FS=":"}{print $1}')
    echo $vipip
    declare -p vipip
    echo "cyle loop"

更新:

所以我尝试了另一个测试。我发现了奇怪的行为,我不确定如何修复它。

我在设置之前和之后声明了vipip。

./findvips-final.scr: line 240: declare: vipip: not found
10.10.10.10
declare -- vipip="10.10.10.10"
cyle loop
declare -- vipip="10.10.10.10"
12.12.12.12
declare -- vipip="12.12.12.12"
cyle loop

导致以下结果。请注意,12.12.12.12没有" e"在它的最后

    #declare -p vipip
    vipip=$(tmsh list ltm virtual $vip | grep destination | awk 'BEGIN{}{print $2}' | awk 'BEGIN{FS=":"}{print $1}')
    echo $vipip
    #declare -p vipip
    echo "cyle loop"

如果我注释掉声明声明,我会得到一个" e"

10.10.10.10
cyle loop
12.12.12.12e
cyle loop

结果

echo -ne "$((100*$z/$count))% Complete\r"

我找到了答案。我上面有一个进度表,我正在完成e。

{{1}}

我把qip上的$ vipip包裹在回声中,它就像我想的那样工作。呃等待浪费时间。

1 个答案:

答案 0 :(得分:0)

你可以像下面一样直接设置<input type="text" name="rs:def:website" size="48" maxlength="64" disabled> 从你的命令中提取Ip,不需要循环,FS也可以搜索字符串

awk

<强>解释

your_command | awk -F'[ :]' '/destination/{gsub(/[^0-9.]/,"",$2); print $2}' - 设置字段分隔符

-F'[ :]' - 在行/记录/行中搜索单词目的地

'/destination/ - 从第二个字段中删除除数字和点以外的任何内容(以便像gsub(/[^0-9.]/,"",$2)这样的随机字符,您上面所说的内容将被删除)

e - 打印第二个字段