Как использовать grep для извлечения определенного значения поля из строк - PullRequest
4 голосов
/ 18 июня 2010

У меня есть строки в файле, которые выглядят следующим образом

....... DisplayName="john" ..........

, где .... представляет переменное число других полей.

Используя следующую команду grep, я могу извлечь все строки, которые имеют действительное поле 'DisplayName'

grep DisplayName="[0-9A-Za-z[:space:]]*" e:\test

Однако я хочу извлечь только имя (то есть "Джон").") из каждой строки вместо всей строки, возвращаемой grep.Я пытался конвейеризовать вывод команды cut, но она не принимает разделители строк.

Ответы [ 2 ]

4 голосов
/ 16 октября 2013

Это работает для меня:

awk -F "=" '/DisplayName/ {print $2}'

, который возвращает "john". Чтобы удалить кавычки для john, используйте:

awk -F "=" '/DisplayName/ {gsub("\"","");print $2}'
4 голосов
/ 28 апреля 2013

В частности:

sed 's/.*DisplayName="\(.*\)".*/\1/' 

Должно быть, семантика sed - это s / subsitutethis / forwardis /, где "/" - разделитель.Экранированные скобки в сочетании с экранированными 1 используются для сохранения части шаблона, обозначенной скобками.Это выражение сохраняет все в скобках после отображаемого имени и отбрасывает остальные.

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

sed -n 's/.*DisplayName="\(.*\)".*/\1/p'

Опция -n и флаг pговорит sed распечатать только измененные строки.

Подробнее: http://www.grymoire.com/Unix/Sed.html

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