grep by paragraph
Suvayu Ali
fatkasuvayu+linux at gmail.com
Sun Sep 1 22:12:19 UTC 2013
On Fri, Aug 30, 2013 at 11:54:20AM -0500, Michael Hennebry wrote:
> On Fri, 30 Aug 2013, Timothy Murphy wrote:
>
> >Dave Mitchell wrote:
> >
> >>>that will print out a whole paragraph -
> >>>defined as the section between two blank lines -
> >>>containing a given word or phrase?
> >>>
> >>>Such as the above 4 lines.
> >>>If not, can anyone suggest a simple script that will do this?
> >>
> >>The perl one-liner below demonstrates this. Setting the $/ (input record
> >>separator) var to the empty string causes perl to read in "lines" a
> >>paragraph at a time.
> >
> >> $ perl -e'$/=""; while (<>) { print if /green/ }' /tmp/text
> >
> >Thanks for the solutions.
> >
> >I gather there is no method using grep or one of its variants?
>
> sed could do it.
> I don't have a recipe on me at the moment.
Try this:
$ sed -e '/[^[:space:]]\+/{H;d}' -e 'x;/<search_string>/!d' path_to_file.txt
This has the side-effect of adding a newline in the front. You can
partially deal with it by using `1h;1!H' instead of `H' in the first
expression; but it only works if the match is in the 1st paragraph. I
do not think it is possible to deal with it properly in sed.
Cheers,
PS: Modified version of an example from this article:
<http://www.thegeekstuff.com/2009/12/unix-sed-tutorial-7-examples-for-sed-hold-and-pattern-buffer-operations/>
--
Suvayu
Open source is the future. It sets us free.
More information about the users
mailing list