如何在bash中用多个字符分隔字符串。 我想获得第一个IP地址。
inet addr:127.0.0.1 Mask:255.0.0.0
我会这样做
echo "inet addr:127.0.0.1 Mask:255.0.0.0" | cut -d' ' -f2 | cut -d':' -f1
但我想将最后两个命令合并为一个命令。
我想得到
127.0.0.1
答案 0 :(得分:1)
使用awk
,将字段分隔符设置为一个或多个空格/制表符或:
,并获取第三个字段:
awk -F '[[:blank:]:]+' '{print $3}'
注意,这将使所提到的字段分隔符分隔第三个字段,该字段可能是也可能不是有效的IP地址;从您对cut
的尝试来看,我假设输入是一致的。
示例:强>
% awk -F '[[:blank:]:]+' '{print $3}' <<<'inet addr:127.0.0.1 Mask:255.0.0.0'
127.0.0.1
答案 1 :(得分:0)
将IFS设置为分隔符:
echo inet addr:127.0.0.1 Mask:255.0.0.0 |
{ IFS=': ' read i a ip m e; echo $ip; }
这会将变量i
设置为字符串inet
,a
&lt; - addr
,ip
&lt; - 127.0.0.1
, m
&lt; - Mask
和e
&lt; - 255.0.0.0
。请注意(在许多shell中)变量是作用域的,并且会在大括号外丢失它们的值。有一些技术可以在shell中为它们提供全局范围,这明显限制了它们的范围,例如:
IFS=': ' read i a ip m e << EOF
inet addr:127.0.0.1 Mask:255.0.0.0
EOF
echo $ip