我想替换"。"在这个结果中:" 172.16.0.25"用"点"。
这是我的代码:
#!/bin/bash
connection=`netstat -tn | grep :1337 | awk '{print $5}' | cut -d: -f1`
#this returns "172.16.0.25"
replace=" dot "
final=${connection/./$replace}
echo "$final"
返回:test.sh: 4: test.sh: Bad substitution
我尝试使用tr '.' ' dot '
,但这只取代了'。'有空格('')
我知道这是一个非常愚蠢的问题,但我是Shell Script的新手。
此外,如果它发生任何变化,我会在Raspberry Pi 2上运行Raspbian。
答案 0 :(得分:2)
connection=`netstat -tn | grep :1337 | awk '{print $5}' | cut -d: -f1 | sed 's/\./ dot /g'`
您甚至可以通过awk
:
connection=`netstat -tn | awk '/1337:/ && !x { split($5, a, /:/); x = a[1]; gsub(/[.]/, " dot ", x); print x }'`
(我添加了&& !x
以确保只提取了一行,以防万一。)
答案 1 :(得分:2)
您可以单独使用awk
执行相同操作:
netstat -tn | awk '/:1337/{sub(/:.*/,"",$5);gsub(/\./," dot ",$5);print $5}'
如果匹配模式:1337
,请转到5th
字段。现在删除:number
部分。同时将.
替换为dot
并打印该字段。
答案 2 :(得分:2)
这条线对我来说很好(虽然它只会替换第一个点;使用${connection//./$replace}
替换所有这些点),所以最可能的事情是你实际上没有使用bash。 / p>
bash错误消息在b
中有一个小写bad substitution
,并在行号前加上line
。显示的错误消息看起来像来自/bin/sh
。
如果使用命令
运行脚本sh test.sh
然后系统将使用/bin/sh
代替/bin/bash
。
答案 3 :(得分:1)
虽然@Amadan的回答指出了它,但我发布了一个变体(仅供爱好者使用),冒着负面投票的风险:)
connection=$(netstat -tn | grep :1337 | awk '{gsub("\.","dot", $5); print $5}' | cut -d: -f1)
答案 4 :(得分:0)
您可以简单地使用:
final="${connection//./$replace}"
示例:
#!/bin/bash
connection="172.16.0.25"
replace=" dot "
final="${connection//./$replace}"
echo "$final"
输出:
172 dot 16 dot 0 dot 25