如何使用SED仅使用字符串中的制表符替换最后一个特定字符(点)? String是IP地址

时间:2014-12-29 07:24:39

标签: sed

我想用标签替换字符串(IP地址)中的最后一个字符(点)。假设,如果我有10.25.16.19.4,我希望输出为10.25.16.19 4(在最后一个点之后,我们拥有的是端口)。 如果我们有localhost.42916,预期输出为: - localhost 42916

Catch是: - 只有最后一个点应该用tab替换,剩下的应该保留。

感谢。

4 个答案:

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