Awk Print Line After A Matching /regex/

by on May 13, 2009 · 9 comments· LAST UPDATED May 13, 2009

in , ,

How do I a print line after matching /regex/ using awk under Linux / UNIX operating systems? I'd like print the line immediately after a line that matches /regex/ but not the line that matches itself.

You can use awk, sed and any other tool for the same. Here is awk syntax:
awk '/regex/ { getline; print $0 }' /path/to/file
awk -F: '/regex/ { getline; print $0 }' /path/to/file

getline used to set $0 from next input record; it also set NF, NR, FNR. For example, match 'Registrar:' string and print actual registrar name from whois look up:
whois bbc.co.uk | awk -F: '/Registrar:/ && $0 != "" { getline; print $0}'
Sample output:

        British Broadcasting Corporation [Tag = BBC]


If you would like to be kept up to date with our posts, you can follow us on Twitter, Facebook, Google+, or even by subscribing to our RSS Feed.


{ 9 comments… read them below or add one }

1 Hai Vu May 13, 2009 at 4:03 pm

I suggest to use print instead of print $0: it is shorter.

Reply

2 Nikhil May 14, 2009 at 9:06 am

$0 != “” looks like a redundant check since it is still the line matching the regex and not the next line.

Reply

3 GByte May 14, 2009 at 9:15 am

How about:
$pgrep -A 1 regexp | tail -n 1
?

Reply

4 Julio A. Cartaya May 16, 2009 at 10:17 am

Simply saying:
$ awk ‘/regexp/’ /pathto/file
will do the trick: the default action in awk is printing.

Reply

5 nyxx May 16, 2009 at 6:26 pm

Reducing awk code for a while we’ll get tha same
$ whois bbc.co.uk | awk -F: '/Registrar:/ { getline; print }'
British Broadcasting Corporation [Tag = BBC]

Reply

6 Ajay June 8, 2009 at 3:12 am

You can us grep as well:
whois bbc.co.uk | grep -A 1 Registrar| grep -v Registrar

Reply

7 paddu July 1, 2011 at 11:30 am

I have a line abc=xyz
i want to find a pattern “abc=” and if exist print xyz
can some one please help

Reply

8 royi January 7, 2012 at 12:15 am

awk -F “=” ‘{if ($1 like “abc”) print $2 }’

Reply

9 Philippe Petrinko April 25, 2013 at 8:50 am

Hi, nice topic.

By the way,

1) using [-F] parameter is totally useless here, there is no point in defining [Field separator] as “:”.

2) As Nikhil stated, test on [$0] is also useless.

3) You may want to get rid of heading 8 space characters, using [substr]

So this code will do the trick:

whois bbc.co.uk | awk ‘/Registrar:/ { getline; print substr($0,9)}’

Thanks to change your article accordingly,

– Philippe

Reply

Leave a Comment

You can use these HTML tags and attributes for your code and commands: <strong> <em> <ol> <li> <u> <ul> <kbd> <blockquote> <pre> <a href="" title="">

Tagged as: , , , , , , , ,

Previous Faq:

Next Faq: