2016-11-29 11 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することができます|ヘッド-5 | nl' ... – twalberg

答えて

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最初に結果を制限するために、次に、行があるかどうかをテストするために2番目のgrepを入力します。たとえば:

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

あなたはオプション私はちょうどメイン$ {パターン} -l `グレップを使用することになり-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) 
関連する問題