2016-11-09 49 views
-1

我想與ENP擊:更改字符串變量與

實例啓動第一個接口隔離啓動的第一個字:

foo = "bar0s0 foo0s8 enp0s0" 
startword = "enp" 

結果:

$foo = enp0s0 
+2

errr?你還試過了什麼? –

回答

0
WORDS="bar0s0 foo0s8 enp0s0" 
START="enp" 

for w in $WORDS; do 
    case $w in 
    ${START}*) 
      echo $w 
      break # break out of the for loop for first instance 
      ;; 
    esac 
done 
+0

一般來說,最好使用數組,'words =(bar0s0 foo0s8 enp0s0)'。 – chepner

+0

errr,雖然我明白你在說什麼:-)我不知道他從哪裏捕捉到了單詞。數組肯定更容易,是的,但如果你首先生成列表,則不會。 –

0
foo=$(echo $foo|sed -e "s/^.*\(${startword}[^ ]*\).*$/\1/") 
+0

儘管此代碼片段可能會解決問題,但並不能解釋爲什麼或如何回答問題。請[請提供您的代碼解釋](// meta.stackexchange.com/q/114762/269535),因爲這確實有助於提高帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。 **舉報人/評論者:** [僅限代碼解答,例如downvote,請勿刪除!](// meta.stackoverflow.com/a/260413/2747593) –

0

這裏有一個解決方案,使用awk,modify to滿足您的需求:

echo "bar0s0 foo0s8 enp888 enp0s0" | awk ' { for(i = 1; i <= NF; i++) if($i ~ "enp") { print $i; break;} } ' 
0

您將問題標記爲bash,因此我將提供一個簡單的便攜式解決方案。

既然你沒有提供你的問題的上下文,很難確定什麼是最好的方法可能是,但在大多數情況下,這應該做的伎倆。

bash>bash --version 
GNU bash, version 3.2.52(2)-release (i586-suse-linux-gnu) 
Copyright (C) 2007 Free Software Foundation, Inc. 
bash>foo="bar0s0 foo0s8 enp0s0 random word123" 
bash>startword="enp" 
bash>index=$(expr index "$foo" $startword) 
bash>echo ${foo:$(($index -1)):6} 
enp0s0 

需要注意幾個問題:

  1. 這裏假設你實際上使用bash的工作和你的工具是比較有限的。
  2. 這也假定接口名稱總是6個字符。

這種方法使用的子字符串的提取,如果你想讀了它看一看在bash http://www.tldp.org/LDP/abs/html/string-manipulation.html