2016-11-29 2 views
1

Для задания домашней работы мне нужно взять результаты из команды grep и записать до первых 5 из них, с номерами от 1 до 5. (Распечатайте номер, затем пробел, затем строка из grep.) Если строк нет, напечатайте сообщение об этом. До сих пор мне удалось сохранить команду 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

Я бы просто использовать 'Grep -l основной $ {шаблон} | head -5 | nl' ... – twalberg

ответ

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 
0

вы можете вычленить параметры -c и -l

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) 
Смежные вопросы