Text Manipulation/Replacement
Rashkae
ubuntu at tigershaunt.com
Tue Sep 23 14:20:06 UTC 2008
Rashkae wrote:
> Brian McKee wrote:
>>>> cat foo.txt | perl -pi -e 's/\n//g'
>>> This worked...kinda...but it ate all of the new lines, so I have one continuous line. I need to find all instances of "\n," and replace them with ",".
>> cat foo.txt | perl -pi -e 's/\n/,/g' should work.
>>
>
> There is no reason to use cat. If you want to work with STDIN and
> STDTOUT, use < > operators. example:
>
> perl -p -e 'some code' < input.file > output.file
>
> Or, if you use the i operator, that tells perl to edit the file in
> place, so there's no reason to input / output
>
> perl -pi -e 'some code' myfile.txt
>
>
> This will overwrite your file with the changes.
>
> And finally, the real problem, by default, perl only reads one line at a
> time, so /n\, will never exist, because each input will end at /n and
> the next input will begin with ,.
>
> The quick and dirty way to solve this is to use -077 (zero seven seven).
> That will put perl in file slurp mode, which means the input will take
> the whole file, rather than one line at a time.
>
> You have to be careful not to dos yourself with this command. If you
> input a large enough file, it will all go into ram until you run out and
> your computer crashes in unpredictable ways that depend on your kernel
> version (most of them not pretty)
>
> perl -pi -077 -e 's/\n,/,/g' myfile.txt
>
>
>
> This command will do what you asked.
> It will only nuke the /n if the next line begins with with a ,
>
Grr, need more coffee!!! You need 3 7's..
-0777 instead of -077 Sorry!
More information about the ubuntu-users
mailing list