对于家庭作业,我必须从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
答案 0 :(得分:0)
如果您仅被允许使用grep
和bash
(?):
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)