以下を使用して、複数のファイルから2つの特定の単語を含む行を検索できます。
for f in $(ls *.txt); do
echo ">"$f; more $f | grep word1 | grep word2
done
これで、内容全体を繰り返し入力する必要がないように、これを行うシェルスクリプトを作成したいと思います。検索時に1、2単語を使用するオプションも追加したいと思います。検索された単語をコマンドラインのシェルスクリプトに渡します。私は次のシェルスクリプトsearchwords.shを書きました。
word1=$1
word2=$2
for f in $(ls *.txt); do
echo ">"$f
###if word2 is empty; then execute
if [-z $word2]; then
more $f | grep $word1
else
###if word2 is not empty
more $f | grep $word1 | grep $word2
fi
done
使用法:
sh searchwords.sh word1 word2
目的の結果が得られましたが、エラー出力も表示されます。
[-z: not found
私のコードが正しくないことを知っていますが、配置できません。
答え1
スクリプトにいくつかのエラーがあります。
- 足りないスペース
[-z $word2]
- 変数に二重引用符がありません。
- 役に立たない使用
more | grep
- 解析された出力が
ls
破損しています。 grep
$word1
$word2
ダッシュで開始または起動すると失敗します。-
修正内容は次のとおりです。
word1=$1
word2=$2
for f in ./*.txt; do
printf '>%s\n' "$f"
###if word2 is empty; then execute
if [ -z "$word2" ]; then
grep -- "$word1" "$f"
else
###if word2 is not empty
grep -- "$word1" "$f" | grep -- "$word2"
fi
done