任意の数で文字列を Grep します。

任意の数で文字列を Grep します。

以下を含む行を探したいです。

 - 0 amount
 - 122,000,000 amount
 - 50,000 amount

使ってみました。

grep -rhI " - * amount ".

しかし、以下を含むものは何でも出力されます。

 - 

含まれているかどうか

amount

問題は、私は文字列だけが欲しいということです

 - * amount

これは*その間のすべてを意味します- (here) amount。 「-」のみを含む行が無視される場合は許可されます。

しかし、これはうまくいきません。

ベストアンサー1

*0個以上と一致します。先行文字またはパターン。

これは- * amount一致するという意味です。

  • - amount
  • - amount
  • - amount
  • (等)

作成した数字を一致させるには、- [0-9,]+ amountasパターンを使用してください。+少なくとも前の正規表現に一致するように強制し、すべての[0-9,]数字またはカンマに一致します。

次のファイルが提供されます。

 - 0 amount
 - 122,000,000 amount
 - 50,000 amount

 - amount
 -     amount
 - some amount

これは働きます:

$ grep -E -e '- [0-9,]+ amount' file
 - 0 amount
 - 122,000,000 amount
 - 50,000 amount

拡張正規表現演算子なので必須で、-Eそうでなければパターンのオプションが次に解釈されるため必須です(次の項目が入力に適用される正規表現であることを意味します)。いいえ。代わりに使用してください。+-e-grep-egrep-E\{1,\}+

パターンを線の始めと終わりに固定することもできます。

$ grep -E '^ - [0-9,]+ amount$' file

つまり、もはや-e必要ではなく、以前と同様に、行が空白で始まり、ダッシュや数字などが続くことを保証します。文字列はamount行の最後の項目でなければなりません(単語を行の末尾に固定するために使用されます$)。

おすすめ記事