Как найти информацию в файле с помощью регулярных выражений в Linux - PullRequest
0 голосов
/ 28 мая 2009

У меня есть файл с множеством строк. Один из них выглядит так:

set auto_upgrade {1 2 3 4}

Список может содержать больше чисел.

Теперь в сценарии оболочки я хочу заглянуть в этот файл и выяснить, какой номер является последним в списке. В приведенном выше примере он должен найти 4. У меня есть регулярное выражение, чтобы найти это:

set auto_upgrade {\([0-9] \)*\([0-9]\{1,\}\)}

Вторая группа содержит то, что мне нужно. Тем не менее, как я могу использовать это регулярное выражение? Я попытался sed , но он возвращает полный файл с подстановкой. Я просто хочу вторую группу.

Заранее спасибо, Barth

Ответы [ 3 ]

3 голосов
/ 28 мая 2009

Во-первых, запустите sed в тихом режиме: он не должен ничего печатать, если это не указано (это флаг -n). Затем печатать, только если была сделана замена (это модификатор шаблона p)

sed -n 's/set auto_upgrade {\([0-9] \)*\([0-9]\{1,\}\)}/\2/p'
0 голосов
/ 28 мая 2009
sed 's/.*\([0-9]\+\)}/\1/g' 

«\ 1» в разделе замены соответствует группе. т.е. (игнорируя экранирование и кавычки)

sed s/pattern1(pattern2)/\1/g 

вернет согласованную часть pattern2

0 голосов
/ 28 мая 2009

Что-то вроде

имя файла cat | perl -pe 's /^.* (\ d +) \} / $ 1 /'

должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...