sed como substituir quando string tem “http: //” nela?

6

Eu tenho um arquivo xx que tem o seguinte conteúdo:

@base_url = "http://dmstaffing-stage.herokuapp.com/"

Eu quero usar sed para eliminar essa linha (substitua por nada). Eu usei esta técnica sed com várias outras linhas com sucesso, por exemplo

sed -i 's/require "selenium-webdriver"//' xx

Mas minha tentativa para a linha @base_url não está funcionando. Eu suspeito que o "ou o // no http: // estão bagunçando, mas não consigo consertar!

Eu tentei:

$ sed  's/@base_url = "http://dmstaffing-stage.herokuapp.com/"//' xx
sed: -e expression #1, char 23: unknown option to 's'

$ sed  's/@base_url = \"http://dmstaffing-stage.herokuapp.com/\"//' xx
sed: -e expression #1, char 24: unknown option to 's'

$ sed  's/@base_url = "http:\/\/dmstaffing-stage.herokuapp.com/"//' xx
sed: -e expression #1, char 58: unknown option to 's'

mas nenhum funcionou.

    
por Michael Durrant 15.05.2013 / 20:30

4 respostas

5

Como mencionado, use outro separador ou escape das barras. Sua última tentativa perde o escape da última barra.

E como apontado por @StephaneChazelas , escape dot também.

E, incluindo @terdon se sed não for necessário; grep -Fxv , onde -F é uma cadeia fixa, não regex, seria uma opção. -x garante que corresponda a linhas inteiras. -v inverte.

Um benchmark simples (muito simples) com time -v parece favorecer sed . (Variantes GNU).

sed 's/@base_url = "http:\/\/dmstaffing-stage\.herokuapp\.com\/"//' xx

Para apagá-lo completamente (não deixar linha em branco) use:

sed '/@base_url = "http:\/\/dmstaffing-stage\.herokuapp\.com\/"/d' xx
                                                                |
                                                                +--- Delete
    
por 15.05.2013 / 20:47
4

Tente usar outro separador:

sed  's|@base_url = "http://dmstaffing-stage.herokuapp.com/"||' xx
    
por 15.05.2013 / 20:33
3

As barras na regex estão bagunçando os delimitadores do sed. Mas você pode usar diferentes delimitadores do que a barra. Por exemplo:

sed  's#@base_url = "http://dmstaffing-stage.herokuapp.com/"##' xx
    
por 15.05.2013 / 20:36
2

Você pode escapar das barras, como sed -e 's/"@base_url = "http:\/\/dmstaffing-stage.herokuapp.com\/"/d' . Esta selva de /\/\//\// é um sintoma do que é chamado de LTS (Síndrome do Paliteiro Inclinado). A melhor maneira de contornar isso é simplesmente usar outro delimitador, como ; no seu caso, ou qualquer outro caractere não alfanumérico que agrada você hoje (e não está incluído no que você tem em mente, obviamente).

    
por 15.05.2013 / 22:09