String 从ip中删除中间八位字节,直到满足某些条件

String 从ip中删除中间八位字节,直到满足某些条件,string,awk,sed,strip,string-substitution,String,Awk,Sed,Strip,String Substitution,我有一个IP和端口号字符串,类似于:10.213.110.49.33482;10.213.106.12.20001:” 两个ip用分号分隔。最后一个小数点显示端口号。我需要的是转换上面的字符串,如下所示: “10.213.110.49 20001:” 我只想使用SHELL脚本删除第一个IP的中间八位字节和端口号。我想从第一部分提取IP,忽略端口号,从第二部分提取IP,我只想使用sed提取端口号: sed 's/\.[0-9]*;.*\.\([0-9]*:\)/ \1/' <<<

我有一个IP和端口号字符串,类似于:
10.213.110.49.33482;10.213.106.12.20001:
” 两个ip用分号分隔。最后一个小数点显示端口号。
我需要的是转换上面的字符串,如下所示: “
10.213.110.49 20001:


我只想使用SHELL脚本删除第一个IP的中间八位字节和端口号。我想从第一部分提取IP,忽略端口号,从第二部分提取IP,我只想使用sed提取端口号

sed 's/\.[0-9]*;.*\.\([0-9]*:\)/ \1/' <<< \
         '10.213.110.49.33482;10.213.106.12.20001:'
awk解决方案:

s="10.213.110.49.33482;10.213.106.12.20001:"
echo $s | awk -F"[.;]" '{OFS=".";print $1,$2,$3,$4" "$10}'
输出:

10.213.110.49 20001:

您只需使用bash替换,只需执行两个步骤:

s='10.213.110.49.33482;10.213.106.12.20001:'

port="${s##*.}"

ip="${s%;*}"
ip="${ip%.*}"

echo "$ip $port"

第一个IP的部分-是否应忽略第二个IP,或者第一个IP必须派生第二个IP的某些部分???更清楚一点,我想从第一部分提取IP,忽略端口号,从第二部分提取IP,我只需要端口号。你说的“仅SHELL脚本”是什么意思?你有sed的标签,所以可以从shell调用sed吗?是的,我不想要用python或任何其他语言的解决方案。我可以在shell脚本@YunnoschThanks-alot@grail中使用sed、awk、substitution或任何我可以使用的东西。你做的正是我需要的。你能解释一下你在这里做了什么吗?#从开头删除,从结尾删除%。如果将其中一项加倍,则会从同一方向删除,直到最后一次出现。所以${s#*.}将从前面删除,直到第一节课,但是${s##*.}将删除所有,直到最后一节课。你这边的聪明人。真的很有帮助:)谢谢你,先生@perreal。工作非常好,这是一个很好的解决方案。非常有用:)您根本不需要反向引用,只需删除该部分并用空格替换即可
s='10.213.110.49.33482;10.213.106.12.20001:'

port="${s##*.}"

ip="${s%;*}"
ip="${ip%.*}"

echo "$ip $port"