sat substitua a linha de correspondência que não começa com #

1

Eu tenho um arquivo chamado "test-file". Ele tem apenas duas linhas a seguir (uma linha com sinal # na frente e segunda linha com o mesmo conteúdo, mas sem hash):

#contents of line
contents of line

Eu quero atualizar / substituir o conteúdo da segunda linha usando o comando sed. Eu sei sua sintaxe simples, por exemplo:

sed -i 's/.*contents of line.*/updated contents/' test-file

mas o comando acima está substituindo ambas as linhas, enquanto eu não quero atualizar a primeira linha com # sinal na frente.

    
por Fakhar ul Hassan 30.08.2018 / 05:07

2 respostas

2

tente

sed 's/^[^#]*contents of line.*/updated contents/' test-file

ou com o início da linha de âncora ^ , e você sabe que a linha começa com content ... , você poderia fazer:

sed 's/^contents of line.*/updated contents/' test-file

Se você souber qual linha vai atualizar, pode alterar diretamente com o número da linha de endereço, como.

sed '2s/.*/updated content/' test-file

adicione -i quando estiver satisfeito com o resultado.

    
por 30.08.2018 / 05:11
5

Você pode fazer a edição da seguinte maneira:

sed -e '/^#/!s/.*/UPDATED_CONTENTS/' input-file.txt

ou

sed -e '/^#/!c\
UPDATED_CONTENTS' input-file.txt

isso é como: para qualquer linha que não comece com # , altere toda a linha para o especificado.

E no caso de você achar que o octothorpe pode ser precedido por espaços em branco, então ajuste o regex para /^[[:blank:]]*#/ enquanto mantém o resto exatamente como está.

    
por 30.08.2018 / 07:26