Grep-строки со случайными числовыми символами

"Решение" найдено..обновление до grub Я предпочитаю лило, но странно не работает с помощью этой процедуры.

3
16.05.2017, 15:47
3 ответа

Что-то вроде этого может выполнить эту работу (с помощью awk-скрипта найдите 1-й токен, чтобы он был тире, а 3-й, чтобы быть строкой «сумма»):

awk '$1=="-" && $3=="amount" {print $2}'

Если вы хотите, чтобы вся строка была напечатана, используйте что-то вроде:

awk '$1=="-" && $3=="amount" {print}'
1
27.01.2020, 21:12

*будет соответствовать нулю или более из предшествующих символовили шаблону.

Это означает, что -*суммабудет соответствовать

  • - сумма
  • - сумма
  • - сумма
  • (и т.д.)

Чтобы числа соответствовали, как у вас для их написания используйте -[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должна быть последней в строке (мы привязываем слово к концу строки с помощью $).

10
27.01.2020, 21:12

Вы также можете использовать

grep -rhI -- '- [^ ]* amount' /path/to/parent/dir/*

, где [^ ]* означает соответствие любому количеству любых символов, кроме пробела.

0
27.01.2020, 21:12

Теги

Похожие вопросы