繁体   English   中英

在数组上使用GREP来查找单词

[英]Use GREP on array to find words

在Shell编程中给出以下数组

foo =(spi spid spider spiderman bar lospia)

我想使用GREP来搜索数组中包含3个字母spi所有单词

正确输出:spi spi spider spiderman lospia

我尝试过这样的事情

foo=(spi spid spider spiderman)

grep "spi" foo

但似乎这是错误的,正确的方法是什么?

最简单的解决方案是将数组元素传递给grep:

printf -- '%s\n' "${foo[@]}" | grep spi

几个笔记:

printf是一个内置的bash,你可以用man printf查找它。 --选项告诉printf后面的任何内容都不是命令行选项。 这样可以防止foo数组中的字符串被解释为这样。

"${foo[@]}"的表示法将数组的所有元素扩展为独立参数。 总的来说,数组中的单词被放入一个多行字符串并通过管道传输到grep中,它将每个单独的行与spi匹配。

以下将打印出包含spi的所有单词:

foo=(spi spid spider spiderman bar)
for i in ${foo[*]}
do
    echo $i | grep "spi"
done
IFS=$'\n' ; echo "${foo[*]}" | grep spi

这会产生输出:

spi
spid
spider
spiderman
lospia

如果要求是在exit-on-error shell标志('-e')下运行脚本/提取并且不必要地退出脚本/提取,同时也避免了在“set + e”中包装代码的繁琐...“set -e“,我总是使用case,因为与grep(1)或test(1)不同,它(case)不更新$? ...

for e in "${foo[@]}" ; do 
    case "$f" in
        *spi*) echo $f ;;
    esac
done

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM