grep 値を取得し、値とともにカウントを出力します。

grep 値を取得し、値とともにカウントを出力します。

私は値をgrepし、値と共に数を出力するbashスクリプトを作成しようとしています。

このような

grep -c 'Thenis' example.txt > example.lst

ちなみに、そのリストファイルには数だけでなく、以下のように私が入力した値も表示されます。

Thenis: 123

答え1

サブシェルを起動し、$0変数を使用してこれを実行できます。

bash -c 'echo "$0: $(grep -c $0 example.txt)"' 'Thenis' > example.lst

答え2

数字だけが出力されるため、与えられgrep -cたパターンをプレフィックスとして使用する必要があります。これは、printf改行文字に従わずに内蔵シェル印刷モードを使用して行うことができます。次に、grepに(同じ行に)カウントを印刷するように依頼します。

括弧を使用してサブシェルに2つのステートメントを配置すると、すべての出力を一度だけリダイレクトできます。

私はそうします:

(printf '%s: ' Thenis; grep -c Thenis example.txt) > example.lst

これを行うための簡単なスクリプトを作成したい場合は、次のようにします。

#!/bin/sh
if [ "$#" -ne 2 ]
then
    echo >&2 "Usage: $0 pattern file"
    exit 1
fi
printf '%s: ' "$1"
grep -c "$1" "$2"

答え3

まだsedを使っている人はいますか?

grep -c Thenis example.txt|sed s/^/Thenis:\ /  > example.lst

または、より一般的な解決策が必要で、gnu sedがある場合

echo Thenis -- example.txt | \
sed -re 's/^(.*) -- (.*)$/echo -n \1:;grep -c \1 \2/e'

最後の警告:それは自分の足に銃を撃つほど強力です。

答え4

以下を作成してみてくださいscript.sh

#!/bin/bash

echo $1: $(grep -c "$1" "$2")

したがって、次のような場合example.txt

Then is, Then-is, Then's, Thenis, Thins,
Thesis, Thanes, Thence, Things,
Thenis, Thorns, Thane's

script.shコマンドプロンプトで実行し、出力を次の場所に保存しますexample.lst

$ ./script.sh 'Thenis' example.txt > example.lst

searchword: count必要な結果は以下にありますexample.lst

$ cat example.lst
Thenis: 2

詳細

  • すべてのスクリプトと同様に、たとえば、次のコマンドを実行してスクリプトが実行可能であることを確認します。sudo chmod +x script.sh
  • bash位置引数:$1最初の引数はに渡されscript.sh$22番目の引数はに渡されます。
  • $(...)使用するために含まれるコマンドの結果を取得するためのコマンド置換。echo

関連情報