如何在bash中用多个分隔符分隔字符串

时间:2017-03-08 02:53:14

标签: bash

如何在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

2 个答案:

答案 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设置为字符串ineta&lt; - addrip&lt; - 127.0.0.1m&lt; - Maske&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