How do I use a new-line replacement in a BSD sed?

后端 未结 4 937
栀梦
栀梦 2020-11-29 07:20

Greetings, how do I perform the following in BSD sed?

sed \'s/ /\\n/g\'

From the man-page it states that \\n will be treated literally with

相关标签:
4条回答
  • 2020-11-29 07:54

    For ease of use, i personally often use

    cr="\n" 
    # or (depending version and OS)
    cr="
    "
    
    sed "s/ /\\${cr}/g"
    

    so it stays on 1 line.

    0 讨论(0)
  • 2020-11-29 07:58

    Another way:

    sed -e 's/ /\'$'\n/g'
    

    See here.

    0 讨论(0)
  • 2020-11-29 08:03

    To expand on @sikmir's answer: In Bash, which is the default shell on Mac OS X, all you need to do is place a $ character in front of the quoted string containing the escape sequence that you want to get interpreted. Bash will automatically translate it for you.

    For example, I removed all MS-DOS carriage returns from all the source files in lib/ and include/ by writing:

    grep -lr $'\r' lib include | xargs sed -i -e $'s/\r//'
    find . -name '*-e' -delete
    

    BSD grep would have interpreted '\r' correctly on its own, but using $'\r' doesn't hurt.

    BSD sed would have misinterpreted 's/\r//' on its own, but by using $'s/\r//', I avoided that trap.

    Notice that we can put $ in front of the entire string, and it will take care of all the escape sequences in the whole string.

    $ echo $'hello\b\\world'
    hell\world
    
    0 讨论(0)
  • 2020-11-29 08:12

    In a shell, you can do:

        sed 's/ /\
    /g'
    

    hitting the enter key after the backslash to insert a newline.

    0 讨论(0)
提交回复
热议问题