シェルスクリプトの初心者です。私は脚本をしようとしています。シェルスクリプトでファイルを読む方法
私は毎分データを保存するログファイルを持っています。キーワードが存在する場合、スクリプトはそのログファイル内のキーワードを検出する必要があります。
私は以下のようにしようとしていた:
read jeeva/sample/logs.txt
grep keyword
私は私のスクリプトは、ばかげている知っています。これで私を助けてください。
シェルスクリプトの初心者です。私は脚本をしようとしています。シェルスクリプトでファイルを読む方法
私は毎分データを保存するログファイルを持っています。キーワードが存在する場合、スクリプトはそのログファイル内のキーワードを検出する必要があります。
私は以下のようにしようとしていた:
read jeeva/sample/logs.txt
grep keyword
私は私のスクリプトは、ばかげている知っています。これで私を助けてください。
です-q
オプションは、キーワードが見つかると出力を抑制するオプションです。
これは、変数
some_var=$(cat jeeva/sample/logs.txt)
にファイルを読み込みます。しかし、あなたはそれをする必要はありません。それは、その後$?
がそうでなければ、それは1
に等しくなり、0
に等しくなります発見された場合にのみ、ちょうど
grep keyword jeeva/sample/logs.txt
スクリプトにすることができますので、単語「キーワード」をチェックします。
だから、あなたが行うことができます:私はあなただけで、いくつかのタグ付けされたログメッセージを監視する必要があると思います
grep keyword jeeva/sample/logs.txt
if ! [[ $? ]]
then
echo found
else
echo "not found"
fi
'$? 'を使うのはここの反パターンです。 'grep keyword jeeva/sample/logs.txt;を実行するだけで'その後 ' – cmh
。 方法について:
tail -fn 1000 youFile.log | grep yourTag
テールは、あなたがそれを再実行する必要はありませんので、この場合には、より良いと思われます。
スクリプトが必要な場合は、このいずれかを試してみてください。
#!/bin/bash
while IFS='' read -r line || [[ -n "$line" ]]; do
if [[ $line == *"$2"* ]]; then
echo "Do sth here.";
echo "Like - I've found: $line";
fi
done < "$1"
$ 1ファイル $ 2、あなたのタグは、おそらくあなたは、このよう
$ if grep -q keyword jeeva/sample/logs.txt;
then echo "found";
else echo "not found";
fi
それを書きたい
➜ generated ./script.sh ~/apps/apache-tomcat-7.0.67/RUNNING.txt UNIX
Do sth here.
Like - I've found: access to bind under UNIX.
一般に、 'grepキーワードファイル名'は、ファイルを検索するための受け入れられたパターンです。あなたは毎分これをやっているので、 'tail -f file | grepキーワード 'を使用していますが、これは脆弱な解決策であり、cmd-lineの使用にのみ適しています。この問題を解決するために設計されたユーティリティ、おそらく 'ウォッチャー '(実際に現れるすべてのコーナーケースをカバーするのは簡単な問題ではありません)を探してください。いくつかのアイデアについては、ここで '' bash 'watch' 'を検索してください。がんばろう。 – shellter
@shellter - 'tail -f'(または少なくとも' tail -F')が非常に壊れやすいとは思えません。私は問題解決なしで何年も走ってきたことに基づいて、良い答えを得ている間に[解決策](http://stackoverflow.com/a/10958125/1072112)を提供しました。 – ghoti
@ghoti。うん、私は "壊れやすいかもしれない"と言っていたはずです。私はあなたの答えを確認してください! Tnx! – shellter