debugging 对数组使用GREP查找单词

vwhgwdsa  于 2022-11-14  发布在  其他
关注(0)|答案(4)|浏览(107)

在Shell编程中给定以下数组
foo=(spi蜘蛛蜘蛛蜘蛛侠酒吧lospia)
我想使用GREP搜索数组中包含3个字母spi的所有单词
正确输出:蜘蛛人蜘蛛人
我试过类似的方法

foo=(spi spid spider spiderman)

grep "spi" foo

但似乎这是错误的,什么是正确的方式去做它???

mum43rcc

mum43rcc1#

最简单的解决方案是将数组元素通过管道传输到grep中:

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

几个注意事项:

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

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

f45qwnt8

f45qwnt82#

下面的代码将打印出所有包含spi的单词:

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

r1zhe5dt3#

IFS=$'\n' ; echo "${foo[*]}" | grep spi

这会产生输出:

spi
spid
spider
spiderman
lospia
vlju58qv

vlju58qv4#

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

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

相关问题