该参数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
。
第二个命令中的\S
PCRE 将匹配任何非空格字符。