0

私は趣味でシェル スクリプトを作成するためのトレーニングを行っています。家庭教師から与えられたタスクに出くわしました。

タスクは、検索したいファイル名を入力できるシェルスクリプトを作成することであり、それが存在するかどうかに応じて応答します。それが存在する場合、そこに存在するファイル内の特定の単語を見つける別のオプションがあり、特定の単語を表示する必要があります。

これが私がこれまでに行ったことです。私の家庭教師は、それがgrepと関係があるというヒントだけをくれました??

#!/bin/bash

echo "search the word you want to find"
  
read strfile

echo "Enter the file you wish to search in"
grep $strfile 

"strword" strfile

これが私の改善された作業の始まりです。

#!/bin/bash

printf "Enter a filename:
"
read str
 if [[ -f "$str" ]]; then

echo "The file '$str' exists."

else

echo "The file '$str' does not exists"

ファイル名を検索した後、検索したい単語をファイルが要求していないようです。

私は何を間違っていますか?

!/ビン/バッシュ

read -p "ファイル名を入力してください:" ファイル名

[[ -f $ ファイル名]] の場合。

echo " ファイル名が存在します " その後

read -p "検索したい単語を入力してください。:単語

[grep -c $単語 $ファイル名

そうでなければ、「ファイル $str が存在しません」とエコーします。フィ

4

3 に答える 3

1

次の方法で単語カウントの部分を実行できます。

exists=$(grep -c $word $file)
if [[ $exists -gt 0 ]]; then
    echo "Word found"
fi

それが欠けているものです。スクリプトの残りの部分は問題ありません。

「grep -c」は $word を含む行をカウントするため、ファイルは次のようになります。

word word other word
word
nothing

値「2」を生成します。$() に grep を入れると、結果を変数に格納できます。残りは自明だと思います。特に、投稿に既に含まれていることです:)

于 2013-11-05T19:02:46.090 に答える
0

試す、

 # cat find.sh
 #!/bin/bash
 echo -e "Enter the file name:"
 read fi
 echo -e "Enter the full path:"
 read pa
 se=$(find "$pa" -type f -name "$fi")
 co=$(cat $se | wc -l)
 if [ $co -eq 0 ]
 then
 echo "File not found on current path"
 else
 echo "Total file found: $co"
 echo "File(s) List:"
 echo "$se"
 echo -e "Enter the word which you want to search:"
 read wa
 sea=$(grep -rHn "$wa" $se)
 if [ $? -ne 0 ]
 then
 echo "Word not found"
 else
 echo "File:Line:Word"
 echo "$sea"
 fi
 fi

出力:

 # ./find.sh
 Enter the file name:
 best
 Enter the full path:
 .
 Total file(s) found: 1
 File(s) List:
 ./best
 Enter the word which you want to search:
 root
 File:Line:Word
 ./best:1:root
 # ./find.sh
 Enter the file name:
 besst
 Enter the full path:
 .
 File not found on current path
于 2013-11-05T20:11:55.773 に答える