Usando o comando sed, altere uma string em uma determinada linha com uma determinada string

Usando o comando sed, altere uma string em uma determinada linha com uma determinada string

Preciso usar o sed para alterar uma string em um arquivo apenas na 4ª linha se ele contiver uma string chamada "teste"

Então, basicamente, o que consegui agora é:

sed '/test/ s/abc/zz/g' sample

Basicamente, isso examinará as linhas e verá se tem teste e depois alterará o abc para zz se estiver nessa linha.

Mas como faço isso apenas para a 4ª linha.

tentei

 sed '/test/ 4s/abc/zz/g' sample

Adicionando o 4 na frente do s , mas não funciona.

Responder1

Mão Única:

sed -e '4 {
  /test/s/abc/zz/g
}' <file

Responder2

Não tenho certeza, mas algo assim funcionaria?

awk 'NR==4 {print $0}' filename.txt | grep 'test' | sed 's/abc/xyz/g'

Responder3

outra maneira:

primeiro encontre a linha com a string "test":

LINHA=$(grep "teste" arquivo -n | awk '{print $1}' | cut -d ':' -f1 | xargs)

então usando essa variável LINE faça:

sed arquivo "s$LINEs/abc/zzz/g"

Responder4

você pode usar isso

sed -i '4s/old_text/new_text/g' file_name

informação relacionada