如何在bash中用多個字符分隔字符串。 我想獲得第一個IP地址。如何在bash中用多個分隔符分隔字符串
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
如何在bash中用多個字符分隔字符串。 我想獲得第一個IP地址。如何在bash中用多個分隔符分隔字符串
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
隨着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
謝謝,就是這樣!我無法弄清楚什麼是空白,現在我知道它是[:blank:] –
請注意,這適用於GNU awk,現在是所有其他的awk。對於其他awks,你可以,例如:'awk'{sub(/^[^:] +:/,「」);打印$ 1}''或用其中一個替換其他分隔符:'awk'{gsub(/:/,「」);打印$ 3}''。 –
設定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
< - addr
,ip
< - 127.0.0.1
,m
< - Mask
和e
< - 255.0.0.0
。請注意(在很多shell中)變量是有範圍的,並且將在大括號之外失去它們的值。有一些技術可以使它們在全球範圍內的殼體明顯地限制它們的範圍,例如:
IFS=': ' read i a ip m e << EOF
inet addr:127.0.0.1 Mask:255.0.0.0
EOF
echo $ip
編輯你的Q以包括你的樣品輸入所需的輸出。祝你好運。 – shellter