bash + 在空格分隔的字符串中查找特定单词

bash + 在空格分隔的字符串中查找特定单词

该参数list包括以下示例值

# echo $list
master01.montil131.com worker01.montil131.com worker02.montil131.com

为了找到包含master字符串的单词,我执行以下操作

list=$( for i in ` echo  $list `; do [[ $i =~ master ]] && echo $i ; done )

echo $list
master01.montil131.com

但是这种查找带有master单词的字符串的方法并不是优雅的方法

还有其他建议如何在中查找特定单词list吗?

答案1

为什么不使用简单的grep命令,我假设列表中的单词中没有空格。

 echo $list | tr ' ' '\n' | grep master

它将用新行替换空格,然后 grep word master。

答案2

使用grep -o

grep -o "[^ ]*master[^ ]*" <<<"$list"

如果您知道总是只有master*worker*,则可以使用 Shell 方法:

echo "${list// *worker[^ ]*/}"

答案3

grep -ow 'master[^ ]*' <<<"$list"

或者,使用 GNU grep

grep -Pow 'master\S+' <<<"$list"

-o提取 中字符串的匹配位$list,并-w确保我们不匹配themaster或不以 开头的其他单词master

第二个命令中的\SPCRE 将匹配任何非空格字符。

相关内容