匹配后打印多行

时间:2015-04-29 14:26:50

标签: linux awk

$ 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,\

2 个答案:

答案 0 :(得分:0)

你应该使用grep。这将在比赛后打印2行

  grep -A2 inavg7ey /etc/sudoers 

<强> - 编辑 -

如果您首先删除换行符,这一切都会变得更容易。这将在一行上打印每个用户。十只是使用grep来获得合适的用户

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

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

答案 1 :(得分:-1)

您可以使用:

  

awk&#39; / inavg7ey / {c = N} c&amp;&amp; c - &#39;的/ etc / sudoers的

N - here is number of line after match including match

另一个解决方案:

  

awk&#39; / navg7ey /,/ ^ $ /&#39; / etc / sudoers

awk - 可以在文件中的2种模式之间进行grep,
navg7ey - 这是第一个从中获取的模式;
^$ - 它的第二种模式(^$ - 意味着空行)