regexperlawksedquotes

Replace spaces differently depending on outside or inside single quotes


I have input which has some fields

Here is an example input:

active=1 'oldest active'=0s disabled=0 'function call'=0

I would like to replace :

Output would be:

active=1|'oldest_active'=0s|disabled=0|'function_call'=0

I tried different solutions with sed or perl found on the web but did not managed to do want I want.


Solution

  • $ s="active=1 'oldest active'=0s disabled=0 'function call'=0"
    $ echo "$s" | perl -pe "s/'[^']*'(*SKIP)(*F)| /|/g; s/ /_/g"
    active=1|'oldest_active'=0s|disabled=0|'function_call'=0
    

    Two step replacement:


    Alternate solution:

    $ echo "$s" | perl -pe "s/'[^']*'/$& =~ s| |_|gr/ge; s/ /|/g"
    active=1|'oldest_active'=0s|disabled=0|'function_call'=0
    


    Further reading: