2016-11-09 101 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