String Bash:将字符串变量更改为以开头的第一个单词
我试图隔离以enp开头的第一个接口 例如:String Bash:将字符串变量更改为以开头的第一个单词,string,bash,String,Bash,我试图隔离以enp开头的第一个接口 例如: foo = "bar0s0 foo0s8 enp0s0" startword = "enp" 结果: $foo = enp0s0 下面是一个使用awk的解决方案,可根据您的需要进行修改: echo "bar0s0 foo0s8 enp888 enp0s0" | awk ' { for(i = 1; i <= NF; i++) if($i ~ "enp") { print $i; break;} } ' echo“bar0s0 foo0s
foo = "bar0s0 foo0s8 enp0s0"
startword = "enp"
结果:
$foo = enp0s0
下面是一个使用awk的解决方案,可根据您的需要进行修改:
echo "bar0s0 foo0s8 enp888 enp0s0" | awk ' { for(i = 1; i <= NF; i++) if($i ~ "enp") { print $i; break;} } '
echo“bar0s0 foo0s8 enp888 enp0s0”| awk'{for(i=1;i您将您的问题标记为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,并且您的工具有些有限
这还假设接口名称始终为6个字符
这种方法使用子字符串提取,如果您想了解它,请查看bash中的errr?还有您尝试过什么?一般来说,最好使用数组,words=(bar0s0 foo0s8 enp0s0)
。errr,尽管我理解您的意思:-)我不知道他是从哪里捕获单词的。数组肯定更容易,是的,但如果您首先生成列表,就不容易了。虽然这个代码片段可能会解决问题,但它没有解释为什么或如何回答问题。请注意,这确实有助于提高您的帖子质量。请记住,您回答的是问题供将来的读者阅读,这些人可能不知道您的代码建议的原因。标记者/审阅者:
echo "bar0s0 foo0s8 enp888 enp0s0" | awk ' { for(i = 1; i <= NF; i++) if($i ~ "enp") { print $i; break;} } '
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