我想用标签替换字符串(IP地址)中的最后一个字符(点)。假设,如果我有10.25.16.19.4,我希望输出为10.25.16.19 4(在最后一个点之后,我们拥有的是端口)。 如果我们有localhost.42916,预期输出为: - localhost 42916
Catch是: - 只有最后一个点应该用tab替换,剩下的应该保留。
感谢。
答案 0 :(得分:1)
我使用此替换:
s@\(.*\)\.@\1\t@
也就是说,捕捉到最后一个点的所有内容,将其替换为自身加上一个标签。
答案 1 :(得分:1)
使用行结束锚$:
sed -e 's/\.\([0-9]+\)$/\t\1/'
“\ 1”是第1组,它是捕获的端口。
答案 2 :(得分:0)
sed 's/\([a-zA-Z][^[:space:]]*\)\.\([0-9]\{1,3\}\)/\1 \2/g;s/\(\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}\)\.\([0-9]\{1,3\}\)/\1 \3/g'
如果线路上还有IP5以外的东西,你可以使用它。它不是防弹(IP6,......),但应该在99%的情况下工作。 Posix versin --posix
关于GNU sed
答案 3 :(得分:0)
试试这个。
sed 's/\(.*\)\.\(.*\)/\1\t\2/' file name
输入:
localhost.78
tal.crack.9876
输出:
localhost 78
tal.crack 9876