шаблон grep с продвижением пробелов

Я нуждаюсь в некоторой помощи в установке корректного шаблона для grep. Я должен найти все случаи pattern где строка может иметь ведущее пространство (пространства). Например: В следующем файле:

 1. No pattern recognized.
 2. Pattern to be recognized
 3.          Pattern to be recognized here also
 4.  pattern with only one leading space 

Я хотел бы к grep только строки 2,3 и 4. Номера строки только для ссылки.

До сих пор я попробовал следующее:

grep -i '^ [[:blank:]]pattern', но это возвращает только строку 4.

grep -i '[[:blank:]]pattern' возвраты 1,3 и 4.

grep -i '^[[:blank:]]pattern' возвраты 1,3 и 4.

- Mike P.S., Если это не подходящий форум, то ведет меня соответственно.

2
задан 19 June 2017 в 19:08

2 ответа

Ваша строка 2 и 3 имеет верхний регистр P и требует нуля или большего количества пробелов, поэтому укажите точно что:

$ grep '[[:blank:]]*Pattern'  input.txt                                  
 Pattern to be recognized
         Pattern to be recognized here also

Лично, я рекомендовал бы расширить Ваш шаблон с помощью чего-то еще, как '[[:blank:]]Pattern.*recognized'

3
ответ дан 2 December 2019 в 01:55

То, что я получаю, является Вами, не хотят ни одно ведущее пространство вообще, как строка № 2 или больше, чем одного пространства, вызывают Вас, исключают строку № 4, который имеет одно пространство.

таким образом, я предлагаю:

egrep -i '^\s*pattern' file.txt | grep -v '^\spattern'

или использование сингла awk:

awk 'tolower($0) ~ /^\s*pattern/ && !/^\spattern/ ' file.txt
  • \s как пространство можно изменить его с blank если Вы хотите.
  • egrep -i '^\s*pattern' file.txt сначала мы получаем все строки, запущенные с или без любых времен, ведя пространство после шаблоном.
  • grep -v '^\spattern': затем мы исключаем тех, который содержит точно одно ведущее пространство.

Вышеупомянутый пример работает над файлом без нумерации, если Ваш файл содержит ведущее использование чисел этот:

egrep -i '\s*pattern' file.txt | grep -v '\spattern'

или для awk:

awk 'tolower($0) ~ /\s*pattern/ && !/\spattern/ ' file.txt
2
ответ дан 2 December 2019 в 01:55

Другие вопросы по тегам:

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