我想與ENP擊:更改字符串變量與
實例啓動第一個接口隔離啓動的第一個字:
foo = "bar0s0 foo0s8 enp0s0"
startword = "enp"
結果:
$foo = enp0s0
我想與ENP擊:更改字符串變量與
實例啓動第一個接口隔離啓動的第一個字:
foo = "bar0s0 foo0s8 enp0s0"
startword = "enp"
結果:
$foo = enp0s0
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
一般來說,最好使用數組,'words =(bar0s0 foo0s8 enp0s0)'。 – chepner
errr,雖然我明白你在說什麼:-)我不知道他從哪裏捕捉到了單詞。數組肯定更容易,是的,但如果你首先生成列表,則不會。 –
foo=$(echo $foo|sed -e "s/^.*\(${startword}[^ ]*\).*$/\1/")
儘管此代碼片段可能會解決問題,但並不能解釋爲什麼或如何回答問題。請[請提供您的代碼解釋](// meta.stackexchange.com/q/114762/269535),因爲這確實有助於提高帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。 **舉報人/評論者:** [僅限代碼解答,例如downvote,請勿刪除!](// meta.stackoverflow.com/a/260413/2747593) –
這裏有一個解決方案,使用awk,modify to滿足您的需求:
echo "bar0s0 foo0s8 enp888 enp0s0" | awk ' { for(i = 1; i <= NF; i++) if($i ~ "enp") { print $i; break;} } '
您將問題標記爲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
需要注意幾個問題:
這種方法使用的子字符串的提取,如果你想讀了它看一看在bash http://www.tldp.org/LDP/abs/html/string-manipulation.html
errr?你還試過了什麼? –