e.g。
ip_a="172.31.50.48"
逆转
ip_r="48.50.31.172" << use regex on this line for evaluate text then assign to ip_r
或域名
domain_a="www.linux.org"
逆转
domain_r="org.linux.www" << use regex on this line for evaluate text then assign to domain_r
答案 0 :(得分:5)
Pure Bash,如Agrajag所述:
IFS='.'
array=( $ip )
n=${#array[@]}
for (( i=0; i<$((n/2)); i+=1 )); do
save=${array[i]}
array[i]=${array[n-i-1]}
array[n-i-1]=$save
done
printf "%s\n" "${array[*]}"
答案 1 :(得分:2)
ip_a="172.31.50.48"
ip_r=`echo $ip_a | awk '{n=split($0,A,".");S=A[n];{for(i=n-1;i>0;i--)S=S"."A[i]}}END{print S}'`
domain_a="www.linux.org"
domain_r=`echo $domain_a | awk '{n=split($0,A,".");S=A[n];{for(i=n-1;i>0;i--)S=S"."A[i]}}END{print S}'`
echo $ip_r
echo $domain_r
<强>输出强>
48.50.31.172
org.linux.www
答案 2 :(得分:1)
这可能对您有用:
ip_a="172.31.50.48"
domain_a="www.linux.org"
ip_r=$(sed 'G;:a;s/\([^.]*\)\.\(.*\n\)/\2.\1/;ta;s/\n//' <<<$ip_a)
domain_r=$(sed 'G;:a;s/\([^.]*\)\.\(.*\n\)/\2.\1/;ta;s/\n//' <<<$domain_a)
echo -e "$ip_r\n$domain_r"
48.50.31.172
org.linux.www
答案 3 :(得分:0)
执行此操作的最佳方法不是使用正则表达式。而是拆分字符串。获取数组,然后以相反的顺序打印数组。你如何做到这一点,取决于实现语言,python中的一个例子作为上面的评论给你。
伪码如下:
split string by . to obtain array.
reverse array
print array-elements, joined by .
答案 4 :(得分:0)
另一个awk
解决方案:
echo www.what.ever |\
awk -F '.' '{ for (i=NF; i<=1 ; i--) { output=$i FS } ; print gensub(".$","","g",output) }'