Date: Fri, 29 May 2009 18:30:21 +0530 From: Manish Jain <invalid.pointer@gmail.com> To: Paul Schmehl <pschmehl_lists@tx.rr.com> Cc: Roland Smith <rsmith@xs4all.nl>, FreeBSD Mailing List <freebsd-questions@freebsd.org> Subject: Re: Need sed to do something which sounds simple Message-ID: <4A1FDC65.5040207@gmail.com> In-Reply-To: <81CA7451D4C324A373C6451B@utd65257.utdallas.edu> References: <4A1E8824.1020604@gmail.com> <81CA7451D4C324A373C6451B@utd65257.utdallas.edu>
next in thread | previous in thread | raw e-mail | index | archive | help
Paul Schmehl wrote:
> --On Thursday, May 28, 2009 07:48:36 -0500 Manish Jain
> <invalid.pointer@gmail.com> wrote:
>
>>
>>
>> Hi,
>>
>> I need sed to do something which sounds simple, but I can't figure out
>> the right command. All I need to do is insert a blank after a '}' at the
>> end of a line if the next line begins immediately afterwards (i.e. with
>> no blank line between).
>>
>> //abc.cpp :
>> int myclass::fx(int * arg)
>> {
>> if(! (isValid()))
>> {
>> return -1;
>> }
>> return ptr->fx(arg);
>> }
>>
>> //what-i-want.cpp :
>> int myclass::fx(int * arg)
>> {
>> if(! (isValid()))
>> {
>> return -1;
>> }
>>
>> return ptr->fx(arg);
>> }
>>
>> The commands I have tried are :
>>
>> i)
>> sed -e 's/\(}$\)\n\(^[[:space:]]*[[:alpha:]]\+\)/\1\n\n\2/' \
>> <abc.cpp >what-i-want.cpp
>>
>> ii)
>> sed -e 's/\(}$\)\(^[[:space:]]*[[:alpha:]]\+\)/\1\n\2/' \
>> <abc.cpp >what-i-want.cpp
>>
>> but obviously neither works, which is why posting this message.
>>
>> Can anybody please tell me what the correct command would be like ?
>>
>
> Seems like this would work to add a space only to lines where the next
> line only has a new line :
>
> sed ' /\}$/ { N /}$\n\n/ { s/\}$\n/\} $\n/} } ' file
>
> If the possibility exists that the new line might have spaces as well,
> you could do this:
>
> sed ' /\}$/ { N /}$\n\n/ { s/\}$\n[ ]?/\} $\n/} } '
>
> Note: I haven't tested this, so it may require some modification. Read
> this page on dealing with multiple lines in sed to gain further
> understanding - http://www.grymoire.com/Unix/Sed.html
>
Hello Paul,
After reading the sed document, the following worked for me :
sed '
/}$/ {
N
s/}\n\([[:space:]]\+\)\n*/}\n\n\1/
}' <abc.cpp >what-i-want.cpp
This keeps the indentation intact.
Thanks for the help &
--
Regards
Manish Jain
invalid.pointer@gmail.com
+91-96500-10329
Laast year I kudn't spell Software Engineer. Now I are won.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4A1FDC65.5040207>
