我需要使用shell脚本解析下面显示的单行字符串中的所有ip:port值。我使用awk
,cut
,sed
尝试了很多但是没有成功。请帮我。此(长)行存储在变量中,而不是存储在文件中。
14/03/25 11:53:50 INFO conf.Configuration: dfsdb.properties not found 14/03/25 11:53:50 INFO util.DFSDBUtil: NAMENODEIP--->172.20.6.133:54310 14/03/25 11:53:50 INFO util.DFSDBUtil: NAMENODEIP--->172.20.9.65:54310 14/03/25 11:53:50 INFO util.DFSDBUtil: NAMENODEIP--->172.20.9.66:54310
更新:我想我有更好的代码......
echo "<STRING>"| grep -oE "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}:[0-9]{4,5}"
答案 0 :(得分:1)
根据您的要求,可能没有直接和简单的答案, 但这对你有用,
var="14/03/25 11:53:50 INFO conf.Configuration: dfsdb.properties not found 14/03/25 11:53:50 INFO util.DFSDBUtil: NAMENODEIP--->172.20.6.133:54310 14/03/25 11:53:50 INFO util.DFSDBUtil: NAMENODEIP--->172.20.9.65:54310 14/03/25 11:53:50 INFO util.DFSDBUtil: NAMENODEIP--->172.20.9.66:54310"
用于分隔输出
echo $var | cut -d ">" -f2,3,4,5
---假设您只有5个值。如果更多应用循环或尝试拆分命令进入数组并迭代它
output : 172.20.6.133:54310 14/03/25 11:53:50 INFO util.DFSDBUtil: NAMENODEIP--->172.20.9.65:54310 14/03/25 11:53:50 INFO util.DFSDBUtil: NAMENODEIP--->172.20.9.66:54310
ip:port pair
echo $var | cut -d ">" -f2 |cut -d " " -f1
输出
172.20.6.133:54310
为每个字段应用循环并获取所需的ip:port并尽可能简化您的麻烦定制输入字符串,以便您可以将其拆分并轻松地将其提供给cut命令。