我在使用sed命令时卡住了。我试图使用sed命令获取我的网络地址。我的主机就像
$ hostname -I
192.168.11.12
字符串
我想从上面的地址中只得到“192.168.11.”。
hostname -I | sed -E 's/([0-9]{1,3}\.)([0-9]{1,3}.)([0-9]{1,3}\.)([0-9]{1,3})$/\1\2\3/'
型
但它不工作,我得到
192.168.11.12
型
即使
echo "192.168.11.12" | sed -E 's/([0-9]{1,3}\.)([0-9]{1,3}.)([0-9]{1,3}\.)([0-9]{1,3})$/\1\2\3/'
型
工作正常。有人知道是什么问题吗?
我的环境:Ubuntu 22.04.3 LTS
3条答案
按热度按时间nc1teljy1#
@Wiimm已经给出了一个解释:该行以空格结束。
你可以看看
echo "<$(hostname -I)>"
,响应将以>
结束。当你知道你总是得到一个IP地址时,你可以使用
hostname -i | cut -d '.' -f1,3
。当响应可以是
1.2.3.4 1.2.3.5 1.2.4.1
时,你想要什么?字符串
hsvhsicv2#
你把事情弄得太复杂了。
字符串
就像,删除最后一个点和它后面的所有文本。
您尝试的直接问题似乎是一个点前缺少反斜杠,和/或缺少行开头的锚;尽管如果不是因为有一些明显不可见的文本,这些都不会是致命的(一个空格?或者一些控制字符?)在
hostname
输出的末尾。也许把它传递到cat -v
或od -tx1
,看看它到底打印了什么。v6ylcynt3#
看起来sed命令中的问题与regex模式及其应用方式有关。
试试这个
字符串
看看有没有用