Usando o comando sed para uma linha específica

2

Eu quero mudar uma célula no arquivo quando o estado desejado existir. Exemplo:

Arquivo:

id311    vmName1    state0
id312    vmName2    state0
id313    vmName3    state0

Eu digitarei um script e esse script alterará a coluna de estado de apenas uma linha. Então, se eu digitar sed -i 's/state0/state1/g' all state0 , seja state1 . Eu quero mudar o estado de apenas uma linha como:

Arquivo:

id311    vmName1    state0
id312    vmName2    state1
id313    vmName3    state0 

Como posso usar o comando sed para uma linha especial com id de uso? note: os id's são únicos.

    
por Gefolge 11.08.2017 / 09:51

2 respostas

3

Basta adicionar o número da linha antes: sed '<line number>s/<search pattern>/<replacement string>/ .

$ sed '1s/state0/XXXX/' file
id311    vmName1    XXXX
id312    vmName2    state0
id313    vmName3    state0

Como você deseja editar no lugar, diga:

sed -i.bak '1s/state0/XXXX/' file

Observe que eu uso .bak após o sinalizador -i . Isso executará a alteração no próprio file , mas também criará um arquivo de backup file.bak com o conteúdo atual de file antes da alteração.

Para um número de linha variável, use a variável normalmente, bem como aspas duplas para que ela seja expandida:

sed -i.bak "${lineNumber}s/state0/XXXX/" file
    
por 11.08.2017 / 10:27
2

How can I use the sed command for a special line with use id? note: id's are unique.

Como id s são exclusivos, faz sentido usar o primeiro campo como uma chave:

sed -i '/id312/s/state0/state1/' file

Você pode criar um comando e passar o número de identificação e o arquivo como parâmetros:

#!/usr/bin/env bash
sed -i "/id$1/s/state0/state1/" $2

invocando assim:

./sed.sh 312 file

Observação: sempre tenha cuidado com a opção -i : teste primeiro sem ela.

    
por 11.08.2017 / 17:30