grep変数

grep変数

変数があるとしましょう。

line="This is where we select from a table."

さて、文にselectが何回表示されるのか知りたいです。

grep -ci "select" $line

試してみましたが成功しませんでした。私も試しました

grep -ci "select" "$line"

それでも動作しません。次のエラーが発生します。

grep: This is where we select from a table.: No such file or directory

答え1

grep標準入力を読みました。それだけです。管路...

$ echo "$line" | grep select

...またはここにある文字列...

$ grep select <<< "$line"

また、grepingの前にスペースを改行にすることもできます。

$ echo "$line" | tr ' ' '\n' | grep select

grep...または一致するもののみを印刷するように要求できます。

$ echo "$line" | grep -o select

これにより、一致する行の残りの部分を削除できます。

編集する:ああ、あまりにも早く読んだ。ありがとうございます。表示。発生回数を計算するには、次のいずれかをパイプで接続します。wc(1);)

後で別の修正が行われた。イズカルタ$lineを使用するときに引用されたコメントですecho

答え2

test=$line i=0
while case "$test" in (*select*)
test=${test#*select};;(*) ! :;;
esac; do i=$(($i+1)); done

grep非常に簡単なことは、通話も必要ありません。

または関数として:

occur() while case "$1" in (*"$2"*) set -- \
        "${1#*"$2"}" "$2" "${3:-0}" "$((${4:-0}+1))";;
        (*) return "$((${4:-0}<${3:-1}))";;esac
        do : "${_occur:+$((_occur=$4))}";done

2〜3つのパラメータが必要です。それ以上を提供すると、結果が歪んでしまいます。次のように使用できます。

_occur=0; occur ... . 2 && echo "count: $_occur"

....inが...2回以上表示されると、発生回数を印刷します。このように:

count: 3

$_occur空またはunset呼び出されるとシェル変数にはまったく影響を与えず、1回未満のreturn場合は1です。または、2つの引数のみを使用して呼び出すと、にない場合にのみ1になります。それ以外の場合は0を返します。"$2""$1""$3"return"$2""$1"

したがって、最も簡単な形式で次のことができます。

occur '' . && echo yay || echo shite

...印刷...

shite

...しかし...

occur . . && echo yay || echo shite

...印刷されます...

yay

$2少し異なる方法で作成し、(*"$2"*)ステートメントから引用符を省略することもできます"${1#*"$2"}"。これにより、sh[io]te一致テストなどの一致にシェルグローブを使用できます。

答え3

私はsedを使って文を分割し、ループの各行を比較しました。なぜならそれが私にとって最も簡単な方法のように見えたからです(ここにいる誰にも不快感を与えず、私も専門家ではないので理由があるかもしれません)。人々はこれをしません。わからない)

string="a a a a a asd gsam en"
count=$(echo $string | sed 's/ /\n/g' | grep -w 'a' | wc -l)
echo $count

私が走るとき

mark@gamerblock:~$ string="a a a a a asd gsam en"
mark@gamerblock:~$ count=$(echo $string | sed 's/ /\n/g' | grep -w 'a' | wc -l)
mark@gamerblock:~$ echo $count
5

入力パラメータを持つスクリプトで

#!/bin/bash
echo "Enter your string"
read string
echo "Enter what you want substring counted"
read substring
count=$(echo $string | sed 's/ /\n/g' | grep $substring | wc -l)
echo $count

走っている間

mark@gamerblock:~$ ./substring.sh
Enter your string
peter piper picked a pack of pickled peppers. a pack of pickled peppers peter piper did pick.
Enter what you want substring counted
peter
2
mark@gamerblock:~$ ./substring.sh
Enter your string
peter piper picked a pack of pickled peppers. a pack of pickled peppers peter piper did pick.
Enter what you want substring counted
p
0

正確に一致するものが必要ない場合は、grepから-wパラメータを削除してください。

mark@gamerblock:~$ ./substring.sh
Enter your string
peter piper picked a pack of pickled peppers. a pack of pickled peppers peter piper did pick.
Enter what you want substring counted
p
12
mark@gamerblock:~$

関連情報