
私は値を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
、$2
2番目の引数はに渡されます。 $(
...)
使用するために含まれるコマンドの結果を取得するためのコマンド置換。echo