Search and replace with sed when dots and underscores are present

前端 未结 5 1039
-上瘾入骨i
-上瘾入骨i 2020-12-03 04:51

How do I replace foo. with foo_ with sed simply running

sed \'s/foo./foo_/g\' file.php

doesn\'t work. Thanks!

相关标签:
5条回答
  • 2020-12-03 04:55

    For myself, sed 's/foo\./foo_/g' is working. But you can also try:

    sed -e 's/foo\./foo_/g'
    

    and

    sed -e "s/foo\\./foo_/g"
    

    and

    sed 's/foo[.]/foo_/g'
    
    0 讨论(0)
  • 2020-12-03 04:58

    Interestingly, if you want to search for and replace just the dot, you have to put the dot in a character set. Escaping just the dot alone in a sed command for some reason doesn't work. The dot is still expanded to a single character wild card.

    $ bash --version  # Ubuntu Lucid (10.04)
    

    GNU bash, version 4.1.5(1)-release (x86_64-pc-linux-gnu)

    $ echo aa.bb.cc | sed s/\./-/g  # replaces all characters with dash
    

    '--------'

    $ echo aa.bb.cc | sed s/[.]/-/g  # replaces the dots with a dash
    

    aa-bb-cc

    With the addition of leading characters in the search, the escape works.

    $ echo foo. | sed s/foo\./foo_/g  # works
    

    foo_

    Putting the dot in a character set of course also works.

    $ echo foo. | sed s/foo[.]/foo_/g  # also works
    

    foo_

    -- Paul

    0 讨论(0)
  • 2020-12-03 05:10

    Escape the dot with a \

    sed 's/foo\./foo_/g' file.php
    

    If you find the combination of / and \ confusing you can use another 'separator' character

    sed 's#foo\.#foo_#g
    

    The 2nd character after the s can be anything and sed will use that character as a separator.

    0 讨论(0)
  • 2020-12-03 05:12

    You need to escape the dot - an unescaped dot will match any character after foo.

    sed 's/foo\./foo_/g'
    
    0 讨论(0)
  • 2020-12-03 05:15

    Escape the .:

    sed 's/foo\./foo_/g' file.php
    

    Example:

    ~$ cat test.txt 
    foo.bar
    ~$ sed 's/foo\./foo_/g' test.txt 
    foo_bar
    
    0 讨论(0)
提交回复
热议问题