在bash脚本中,将字符串中的字符替换为多个字符

时间:2015-06-03 05:45:36

标签: bash shell raspbian tr

我想替换"。"在这个结果中:" 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。

5 个答案:

答案 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