Sed, чтобы найти номера строк с регулярными выражениями - PullRequest
1 голос
/ 10 июля 2011

Я пытаюсь использовать команду unix sed, чтобы найти номера строк, которые соответствуют определенному регулярному выражению.Шаблон моего файла ниже

A<20 spaces>
<something>
<something>
..
..
A<20 spaces>
<soemthing>
<something>

Мне нужны все номера строк A<20 spaces>

Я использовал sed -n '/A[ ]{20}/'= <file_name>, но это не работает.Если я вручную наберу двадцать пробелов, это сработает.

Может кто-нибудь, пожалуйста, настройте приведенную выше команду, чтобы она заработала.

Ответы [ 4 ]

5 голосов
/ 10 июля 2011

Брекеты в выражении необходимо экранировать с помощью обратной косой черты:

% sed -n '/A[ ]\{20\}/=' test.txt
1
6

Альтернативой может быть использование -E для интерпретации регулярных выражений как расширенных (современных) регулярных выражений:

% sed -nE '/A[ ]{20}/=' test.txt 
1
6

Или потенциально использовать взамен grep, что требует меньше символов для определения того же поиска:

% grep -n 'A[ ]\{20\}' test.txt 
1 голос
/ 10 июля 2011

Правильный синтаксис будет /A \{20\}/ (и я не понимаю, откуда вы взяли свой синтаксис).

edit: повторить пробел, а не A. не мой день

0 голосов
/ 07 ноября 2013

просто для ответа на запрос контента, потому что он буквально означает символ "20 пробелов, а не двадцать", который все понимают из-за сбоя образца строки sed (я думаю, это хороший ответ, так что другие ответы хороши вэто дело)

sed -n "/<20 spaces>/ =" file_name
0 голосов
/ 10 июля 2011

используйте переключатель -E или -r для расширенного регулярного выражения

...