2015-04-29 2 views
1
$ cat /etc/sudoers  
inavg7ey evl0000332,evl0000333,evl0000234,evl0000999,evs99234456,\\ 
evl3300987,evl3344567,evlser999,eul000123,evs3300123,evs3300124,\\ 
(root,jboss,superss) NOPASSWD:ALL 

inavgmcn evl0000332,evl0000333,evl0000234,evl0000999=(all,wasadmin,\\ 
jboss,superss) NOPASSWD:ALL 

Я хочу распечатать данные пользователя inavg7ey со второй строкой (если есть еще строки там, где я тоже их хочу) .. может ли кто-нибудь помочь мне с этим? Я попытался это:Печать более чем одной строки после матча

awk '/inavg7ey/' /etc/sudoers 

но он показывает только этот один:

inavg7ey evl0000332, evl0000333, evl0000234, evl0000999, evs99234456, \

+1

Использование 'awk' разобрать файл, который поддерживает продолжение линии будет требовать зная, что продолжение линии выглядит и обработки, которые сами (чтобы сделать это надежно). Вы всегда можете использовать одно из решений [здесь] (http://stackoverflow.com/a/17914105/258523). –

+0

'awk '/ inavg7ey/&&/\\\\ $/{print; getline; print}'' –

+0

Спасибо Champ, теперь его отображение соответствующего шаблона также –

ответ

-1

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

awk '/ inavg7ey/{c = N} c & & c--'/etc/sudoers

N - here is number of line after match including match

И еще одно решение:

AWK '/ navg7ey /,/^ $ /'/и т.д./sudoers

awk Grep между-май 2 моделей, в вашем file,
navg7ey - это первый образец grep from;
^$ - это вторая модель в Grep к (^$ - означает пустую строку)

+0

Да, его работа .. Превосходно Я не могу ожидать такого быстрого ответа от вас всех ... Имейте славный день ...снова Спасибо –

+0

небольшая проблема, но здесь, когда я выполняю приведенную выше команду, она показывает все строки в файле, которые содержат другие имена например awk '/ inavg7ey/{c = 9} c && c--' list [root @ dasari9 сценарии] # список VI [корень @ dasari9 скрипты] # AWK '/ inavg7ey/{с = 9} с && c--' список inavg7ey Рамдас evl0000332, evl0003322, evs2233999 \\ evl3300999, evs3300142, evl2232232, evh334490 , evl009o9o \\ = (корень) NOPASSWD: ALL inavgmcn evs300132, evl3333333,3vsfjhasad \\ evl1212123,12312312hh, asdasdasd \\ = (корень) NOPASSWD: ALL Я хочу видеть только inavg7ey пользователя подробности –

+3

@Ramdas, поэтому важно показать нам FEW строки ввода образца, а не только сегмент файла, который вы хотите извлечь. Всегда тривиально выбирать нужные строки, но гораздо сложнее не выбирать линии, которые вам не нужны. На данный момент вы вообще не показали нам ничего, что позволило бы нам найти более надежное решение или помочь вам отладить вашу текущую проблему. Измените свой вопрос, чтобы показать более полезный ввод/вывод - предоставление информации в комментарии не полезно, поскольку оно не может быть отформатировано в соответствии с вашим реальным файлом. Я сильно подозреваю, что вы ДЕЙСТВИТЕЛЬНО хотите просто включить строки, следующие за '\\\'. –

0

Вы должны использовать Grep для этого. Это будет печатать 2 линии после матча

grep -A2 inavg7ey /etc/sudoers 

--edit--

все это становится проще, если сначала удалить символ новой строки. Это напечатает каждого пользователя в одной строке. Десять просто использовать Grep, чтобы получить право пользователя,

cat /etc/sudoers | sed ':a;N;$!ba;s/\\\\\n//g' 

или

cat /etc/sudoers | sed ':a;N;$!ba;s/\\\\\n//g' | grep inavg7ey 
+0

Спасибо за ваш комментарий, здесь часть моего запроса очищается, но то, что именно я ищу, когда я пытаюсь получить информацию о пользователе, используя эту команду, отображающую ok для этого пользователя, как ожидалось .. здесь для других пользователей более 3 - 4 строк .. для каждого пользователя, который не является хорошей практикой для расширения числа и получения информации Ясно, что я Я говорю, что я хочу знать, сколько пользователей имеет доступ к sudo и сколько ящиков у них есть, используя awk, grep Utility для проверки пользователей root и других приложений –

Смежные вопросы