首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数组中的Grep命令

数组中的Grep命令
EN

Stack Overflow用户
提问于 2016-11-29 23:03:13
回答 2查看 111关注 0票数 1

对于家庭作业,我必须获取来自grep命令的结果,并写出它们中的前5个,从1到5进行编号。(打印数字,然后打印空格,然后打印grep中的行。)如果没有行,则打印一条消息说明这一点。到目前为止,我设法将grep命令存储在一个数组中,但这就是我遇到的问题:有谁能提供指导,告诉我如何按照上面的说明继续打印这个命令

代码语言:javascript
复制
pattern="*.c"
fileList=$(grep -l "main" $pattern)
IFS=$"\n"

declare -a array
array=$fileList

for x in "${array[@]}"; do
echo "$x"
done
EN

回答 2

Stack Overflow用户

发布于 2016-11-29 23:23:51

如果只允许使用grepbash(?):

代码语言:javascript
复制
pattern="*.c"
fileList=($(grep -l "main" $pattern))

if test ${#fileList[@]} = 0 ; then
    echo "No results"
else
    n=0
    while test $n -lt ${#fileList[@]} -a $n -lt 5 ; do
        i=$n
        n=$(( n + 1 ))
        echo "$n ${fileList[$i]}"
    done
fi

如果除了grep之外还允许使用命令,那么可以通过nl管道输出结果以添加行号,然后通过head将结果限制在前5行,然后通过第二个grep测试是否有任何行。例如:

代码语言:javascript
复制
if ! grep -l "main" $pattern | \
    nl -s ' ' | sed -e 's/^ *//' | \
    head -n 5 | grep '' ; then
    echo "No results"
fi
票数 0
EN

Stack Overflow用户

发布于 2016-11-30 00:06:36

您可以使用grep选项-c-l

代码语言:javascript
复制
pattern="*.c"
searchPattern="main"

counter=1
while read -r line ; do
    IFS=':' read -r -a lineInfo <<< "$line"
    if [[ $counter > 5 ]]; then
        exit 1
    fi
    if [[ ${lineInfo[1]} > 0 ]]; then
        numsOfLine=""
        while read -r fileline ; do
            IFS=':' read -r -a fileLineInfo <<< "$fileline"
            numsOfLine="$numsOfLine ${fileLineInfo[0]} "
        done < <(grep -n $searchPattern ${lineInfo[0]})
        echo "$counter ${lineInfo[0]} match on lines: $numsOfLine"
        let "counter += 1"
    else
        echo "${lineInfo[0]} no match lines"
    fi
done < <(grep -c $searchPattern $pattern)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40869107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档