grepとコマンドライン引数の使用

grepとコマンドライン引数の使用

内容を含むファイルがありますf1

james john joe  
marie james  
joe   
don marie

grepシェルスクリプトで以下を使用して、s1.sh各行のコマンドラインパラメータの発生を出力したいと思います。

#!/bin/bash   
for ((i = $# ; i > 0 ; i-- ))  
    do  
        grep -c $i f1  
    done

次のように実行するとします。

s1.sh james joe

スクリプトが変数をi位置パラメータとして解釈するにはどうすればよいですか?

ベストアンサー1

スクリプトの引数を一度に1つずつ使用する場合は、grep算術ループを実行する必要はありませんfor

#!/bin/sh

for pattern do
    grep -c -e "$pattern" f1
done

このforループは、スクリプトのパラメータである位置パラメータを繰り返します。各反復で、この値は$pattern次のコマンドライン引数になります。

また、ダッシュで始まるパターンがオプションとして誤って解釈されるのを防ぐために、-e上記の方法を使用します。また、単語の分離やファイル名のグロービングを防ぐためにパターンを参照しました。grepgrep

パターンが実際に正規表現ではなく文字列である場合は、withのgrep使用を検討してください-F

位置引数のリストを使用でき"$@"、上記のループはこれを暗黙的に使用します。繰り返すには、"$@"次のようにします。

for pattern in "$@"; do
   ...
done

引用は必須です。それ以外の場合は、スクリプト引数に対してトークン化とファイル名の一致を実行します。

この答えにはシェルコードは必要ないので、-lineを使用していますbash/bin/sh#!

おすすめ記事