Como adicionar parens em torno do texto

1

Como posso usar o sed para substituir o texto e também anexar ao fim da linha para a correspondência em questão?

Eu tenho um arquivo sed que está fazendo muitas substituições.

Um deles altera ~= para match( usando /=\~/ s/=\~/match( /

Ao fazer isso, eu também quero adicionar um " ) " (espaço + fim de paren) no final da linha em questão (que correspondeu ao jogo original)

Eu tentei isso com essa linha sed:

/=\~/ s/=\~/match(/ s/$/ )/

mas recebi o nosso favorito sed: -e expression #1, char 77: unknown option to s ''
(linha 77 'porque este sed tem muitas outras coisas (omitido)).

Como posso adicionar ) para essas linhas? Posso fazer isso dentro desta partida ou preciso de outra linha para isso? Eu gostaria que fosse apenas para essas correspondências ou eu poderia acabar adicionando um ) extra para expressões "%"match().

fwiw o sed completo é ..

  sed -i 's/\.should/)\.to/
          /\.to ==/s/==/eq/
          /=\~/ s/=\~/match(/ s/$/ )/  <--- line in question
          /[^}.to|end.to]\.to[[:space:]]/ s/\(\S\)/expect(/
          /[^}.to|end.to]\.to_not[[:space:]]/ s/\(\S\)/expect(/
          s/[^}.to|end.to].to[[:space:]]/).to /
          s/to_receive/to receive/
          s/to_not_receive/to_not receive/' ../_spec_seded/"$file"
    
por Michael Durrant 10.11.2013 / 21:37

1 resposta

3

Tente isto:

sed -r "s/=~(.*)$/match()/" <filename>

Além disso, o erro que você está recebendo é porque sed interpreta /=\~/ como um filtro para a linha que a operação deve ser executada, s/=\~/match(/ como a operação e s/$/ )/ como sinalizador para a operação, neste caso Caso você precise usar um grupo e separar as expressões com uma nova linha:

sed -re "/=\~/ {
  s/=\~/match(/
  s/$/ )/
}" <filename>

Aqui está a documentação relevante sobre o bloco de comando {} de info sed

'{ COMMANDS }'
 A group of commands may be enclosed between '{' and '}' characters.
 This is particularly useful when you want a group of commands to
 be triggered by a single address (or address-range) match.
    
por 10.11.2013 / 22:03