我想从字符串中提取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包裹在回声中,它就像我想的那样工作。呃等待浪费时间。
答案 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
- 打印第二个字段