数组中的Grep命令

时间:2016-11-29 15:03:13

标签: bash

对于家庭作业,我必须从grep命令中获取结果,然后写出前5个,将它们从1到5编号。(打印数字,然后是空格,然后是grep中的行) 。)如果没有行,则打印一条消息说明。到目前为止,我设法将grep命令存储在一个数组中,但这是我遇到的问题:任何人都可以提供有关如何继续打印的指导

pattern="*.c"
fileList=$(grep -l "main" $pattern)
IFS=$"\n"

declare -a array
array=$fileList

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

2 个答案:

答案 0 :(得分:0)

如果您仅被允许使用grepbash(?):

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来测试是否有任何行。例如:

if ! grep -l "main" $pattern | \
    nl -s ' ' | sed -e 's/^ *//' | \
    head -n 5 | grep '' ; then
    echo "No results"
fi

答案 1 :(得分:0)

你可以选择 -c -l <​​/ strong>

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)