我想与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?你还试过了什么? –