3

次のような文があります。

"The dog jumped over the moon because he likes jumping"

jump.*そして、一致するすべての単語、つまりjumpedandを見つけたいと思いますjumping。これどうやってするの?

現在、変数に文があります$sentence。そして、テストしたい一致単語を知っています。たとえば$testisjumpです。

ありがとうございました

4

4 に答える 4

4

パイプ不要の Bash ソリューション

これを純粋に Bash で行いたい場合は、正規表現マッチング演算子と組み込みのBASH_REMATCH変数を使用して結果を保持できます。例えば:

re='\bjump[[:alpha:]]*\b'
string="The dog jumped over the moon because he likes jumping"
for word in $string; do
    [[ "$word" =~ $re ]] && echo "${BASH_REMATCH}"
done

コーパスを考えると、これは次の結果を正しく返します。

jumped
jumping
于 2012-07-10T19:06:10.563 に答える
3

この正規表現を試してください:

/\bjump.*?\b/

ここを参照してください。\bは単語の境界に一致し、jump.*?その間のすべてが で始まりjumpます。

bash では、grep で使用できます。

echo $sentence | grep -oP "\b$test.*?\b"
于 2012-07-10T18:53:06.017 に答える
2
echo $sentence | tr ' ' '\n' | grep "^$test"

より徹底するには:

echo $sentence | tr '[[:space:]]' '\n' | grep "^$test"
于 2012-07-10T18:53:21.460 に答える
1

http://www.linuxjournal.com/content/bash-regular-expressions

それはあなたを助けるかもしれないように見えます。(私は正規表現やbashが苦手です、ごめんなさい)

于 2012-07-10T18:52:10.257 に答える