sed/awk/perl: How to replace all spaces each with an underscore that occur before a specific string ?

MRAB python at mrabarnett.plus.com
Sat Aug 22 20:45:18 EDT 2009


John W. Krahn wrote:
> bolega wrote:
>> sed/awk/perl:
>>
>> How to replace all spaces each with an underscore that occur before a
>> specific string ?
>>
>> I really prefer a sed one liner.
>>
>> Example
>> Input :  This is my book. It is too  thick to read. The author gets
>> little royalty but the publisher makes a lot.
>> Output: This_is_my_book._It_is_too__thick_to read. The author gets
>> little royalty but the publisher makes a lot.
>>
>> We replaced all the spaces with underscores before the first occurence
>> of the string "to ".
> 
> $ perl -le'
> $x = "This is my book. It is too  thick to read. The author gets little 
> royalty but the publisher makes a lot.";
> print $x;
> $x =~ /to / && substr( $x, 0, $-[0] ) =~ tr/ /_/;
> print $x;
> '
> This is my book. It is too  thick to read. The author gets little 
> royalty but the publisher makes a lot.
> This_is_my_book._It_is_too__thick_to read. The author gets little 
> royalty but the publisher makes a lot.
> 
If you're interested in a Python regex solution:

s = "This is my book. It is too  thick to read. The author gets little 
royalty but the publisher makes a lot."
s = re.sub(".*?(?=to )", lambda m: m.group().replace(" ", "_"), s)




More information about the Python-list mailing list