2017-03-08 210 views
0

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

+0

編輯你的Q以包括你的樣品輸入所需的輸出。祝你好運。 – shellter

回答

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 
+0

謝謝,就是這樣!我無法弄清楚什麼是空白,現在我知道它是[:blank:] –

+0

請注意,這適用於GNU awk,現在是所有其他的awk。對於其他awks,你可以,例如:'awk'{sub(/^[^:] +:/,「」);打印$ 1}''或用其中一個替換其他分隔符:'awk'{gsub(/:/,「」);打印$ 3}''。 –

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 < - addrip < - 127.0.0.1m < - Maske < - 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 
相關問題