substituindo e adicionando no final das linhas com um comando line sed

1

Eu tenho uma linha como segue

 // Testing this

Estou tentando usar um comando sed para substituir // por uma / * (frase ou palavra entre) * / em cada linha.

por isso deve ser algo como isto

/* Testing this */

A primeira parte é fácil com a chamada

sed 's#//#/*#'

no entanto, com a segunda parte, tentei esta solução

Anexando a palavra no final da linha com sed [duplicado]

Eu tentei com -e , o que me deu um erro de 'comando não terminado s'. Então, eu tentei com um ponto e vírgula para torná-lo um assim que era algo ao longo das linhas de

's#//#/*#;#//#s#/$#*/#'

mas tudo o que parece fazer é a primeira parte (substituindo // por /* ) e não a segunda (colocando */ no final da mesma linha).

O que não estou fazendo corretamente? Quaisquer ponteiros seriam apreciados.

    
por TheRealPdGaming 23.09.2018 / 23:24

2 respostas

0

Que tal

$ cat testfile
// Testing this
foobar
$ sed 'sx//\(.*\)x/* */x' testfile
/* Testing this */
foobar
$
  • sx// : procura linhas contendo //
  • \(.*\)x : coloque a parte restante da linha no grupo de captura 1
  • /* */x : substitua a parte restante da linha por /* (início do comentário, estilo C) seguido pelo conteúdo do grupo de captura 1 (referenciado como ), seguido por */ (fim do comentário , Estilo C)
por 24.09.2018 / 00:06
0

Outra abordagem: faça a pesquisa e substitua a condição de que o comentário seja correspondido:

sed '\!//! {s!!/*!; s!$! */!}' file

Isso diz:

  • se a linha contiver o padrão // ,
    • substitua o texto correspondente por /*
    • e, em seguida, substitua a sequência vazia no final da linha por */
por 24.09.2018 / 16:53

Tags