以下を含む行を探したいです。
- 0 amount
- 122,000,000 amount
- 50,000 amount
使ってみました。
grep -rhI " - * amount ".
しかし、以下を含むものは何でも出力されます。
-
含まれているかどうか
amount
問題は、私は文字列だけが欲しいということです
- * amount
これは*
その間のすべてを意味します- (here) amount
。 「-」のみを含む行が無視される場合は許可されます。
しかし、これはうまくいきません。
答え1
*
0個以上と一致します。先行文字またはパターン。
これは- * amount
一致するという意味です。
- amount
- amount
- amount
- (等)
作成した数字を一致させるには、- [0-9,]+ amount
asパターンを使用してください。+
少なくとも前の正規表現に一致するように強制し、すべての[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
-e
grep
-E
\{1,\}
+
パターンを線の始めと終わりに固定することもできます。
$ grep -E '^ - [0-9,]+ amount$' file
つまり、もはや-e
必要ではなく、以前と同様に、行が空白で始まり、ダッシュや数字などが続くことを保証します。文字列はamount
行の最後の項目でなければなりません(単語を行の末尾に固定するために使用されます$
)。
答え2
次のようなことが行われます(awkスクリプトを使用して、最初のトークンがダッシュで、3番目のトークンが文字列「amount」かどうかを検索します)。
awk '$1=="-" && $3=="amount" {print $2}'
行全体を印刷するには、次のコマンドを使用します。
awk '$1=="-" && $3=="amount" {print}'
答え3
また、使用することができます
grep -rhI -- '- [^ ]* amount' /path/to/parent/dir/*
これは[^ ]*
、スペースを除くすべての文字と一致することを意味します。