*
будет соответствовать нулю или более из предшествующих символовили шаблону.
Это означает, что -*сумма
будет соответствовать
- сумма
- сумма
- сумма
Чтобы числа соответствовали, как у вас для их написания используйте -[0-9,]+ количество
в качестве шаблона. +
приведет хотя бы к одному совпадению предыдущего регулярного выражения, а [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
, чтобы применить к его входу).
Вы также можете привязать шаблон к началу и концу строки:
$ grep -E '^ - [0-9,]+ amount$' file
Это означает, что -e
больше не нужен и гарантирует, что строка начинается с пробела, за которым следует символ тире и число и т.п. как прежде. Строка amount
должна быть последней в строке (мы привязываем слово к концу строки с помощью $
).