"Решение" найдено..обновление до grub Я предпочитаю лило, но странно не работает с помощью этой процедуры.
Что-то вроде этого может выполнить эту работу (с помощью awk-скрипта найдите 1-й токен, чтобы он был тире, а 3-й, чтобы быть строкой «сумма»):
awk '$1=="-" && $3=="amount" {print $2}'
Если вы хотите, чтобы вся строка была напечатана, используйте что-то вроде:
awk '$1=="-" && $3=="amount" {print}'
*
будет соответствовать нулю или более из предшествующих символовили шаблону.
Это означает, что -*сумма
будет соответствовать
- сумма
- сумма
- сумма
Чтобы числа соответствовали, как у вас для их написания используйте -[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
должна быть последней в строке (мы привязываем слово к концу строки с помощью $
).
Вы также можете использовать
grep -rhI -- '- [^ ]* amount' /path/to/parent/dir/*
, где [^ ]*
означает соответствие любому количеству любых символов, кроме пробела.