minha expressão sed não funciona

0

Eu quero usar sed para comentar um determinado comando em um arquivo js. O comando é chamado processLoad (..). Eu apareci com a expressão abaixo, mas isso não faz o que eu espero que faça. O computador que eu estou no pertence ao meu provedor, então eu não sei a versão do Linux que está sendo executado na máquina. [adicionado:]

sed -r -i 's_^\([ \t]+processLoad.*\)$_//_' test.txt

Espero substituir uma linha:

     processLoad('mystr');

em

//     processLoad('mystr')

Eu descobri que '/' como personagem de separação substituta colocaria problemas com // como comentários, então eu escolho _ como caractere de separação substituto.

    
por dr jerry 25.08.2011 / 21:00

4 respostas

2

Experimente sed '/^[[:space:]]*processLoad/s!^!//!'

A primeira parte /^[[:space:]]*processLoad/ limita as ações apenas às linhas que correspondem a esse padrão. A segunda parte s!^!//! é a famosa pesquisa e substituição de sed: encontre o início da linha (^) e substitua por duas barras. Eu uso bangs ( s!!! ) em vez das barras típicas, então não preciso me preocupar em escapar das barras literais na string de substituição. Para mais detalhes, consulte a página sed man .

    
por 25.08.2011 / 23:49
1

Talvez você deva alterar o + para * caso o processLoad ocorra no início de uma linha.

Se processLoad (...) puder ocorrer no meio de uma linha, você precisará de uma expressão diferente.

    
por 25.08.2011 / 22:32
1

Você precisa do sinalizador de regexp estendido (-r)?

Com esse sinalizador, seu regexp está tentando corresponder literal (e) em vez de armazenar a correspondência.

The only difference between basic and extended regular expressions is in the behavior of a few characters: ‘?’, ‘+’, parentheses, and braces (‘{}’). While basic regular expressions require these to be escaped if you want them to behave as special characters, when using extended regular expressions you must escape them if you want them to match a literal character.

Link de regexps estendido

    
por 26.08.2011 / 13:39
0

A expressão abaixo resolveu, para mim funciona no debian linux e no mac os x (bsd), embora o precise ser substituído por $1 . Meio irritante que sed difere tanto em diferentes plataformas.

'sed -e 's_^\([ \t]*processLoad(\)_//_' -i -- test.txt
    
por 27.08.2011 / 11:50

Tags