首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >awk打印不在字符串中的随机"e“

awk打印不在字符串中的随机"e“
EN

Stack Overflow用户
提问于 2017-08-22 00:41:01
回答 1查看 84关注 0票数 1

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

字符串如下所示。

目标x.x:yyyy

其中x是ip,y是端口

代码语言:javascript
复制
    commandout=()
    while IFS= read -r line # Read a line
    do
        commandout+=("$line") # Append line to the array
    done < <(tmsh list ltm virtual $vip | grep destination)
    for output in "$commandout";
    do
        if [[ $output == *"destination"* ]];then
            #split off ip and port
            ipport=$(echo $output | awk 'BEGIN{}{print $2}')
            echo $ipport | awk 'BEGIN{FS=":"}{print $1}'
            echo $ipport
        fi
    done
    declare -p commandout

由于某些原因,awk在ip地址后打印一个随机的"e“。但它似乎只有在2点之后才会这样做。

代码语言:javascript
复制
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")'

更新:

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

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

代码语言:javascript
复制
    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"

结果如下所示。注意,12.12.12.12的末尾没有"e“

代码语言:javascript
复制
./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

如果我注释掉declare语句,我会得到一个"e“

代码语言:javascript
复制
    #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"

结果:

代码语言:javascript
复制
10.10.10.10
cyle loop
12.12.12.12e
cyle loop

我找到了答案。我有一个以上的进度表,我得到了完成的e。

代码语言:javascript
复制
echo -ne "$((100*$z/$count))% Complete\r"

我在echo上将$vipip包装在qoutes中,它的工作方式与我想象的一样。UGh等待是对时间的一大浪费。

EN

回答 1

Stack Overflow用户

发布于 2017-08-22 00:50:29

你可以像下面这样直接设置FS从你的命令中提取Ip,不需要循环,awk也可以搜索字符串

代码语言:javascript
复制
your_command | awk -F'[ :]' '/destination/{gsub(/[^0-9.]/,"",$2); print $2}'

说明

-F'[ :]' -设置字段分隔符

'/destination/ -在行/记录/行中搜索单词目的地

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

print $2 -打印第二个字段

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45802029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档