comando SED linux, alteração de uma determinada linha com conteúdo semelhantes [RESOLVIDO]

1. comando SED linux, alteração de uma determinada linha com conteúdo semelhantes [RESOLVIDO]

lucas nascimento
lcscps

(usa Debian)

Enviado em 03/05/2018 - 16:59h

Boa tarde! Sou novo no fórum e iniciante no linux. Hoje no trabalho me deparei com uma situação que não consigo resolver, ja pesquisei em vários fóruns e artigos mas não encontrei a solução ideal para o meu problema.

Gostaria de um help com o comando sed, preciso fazer uma unica alteração dentro de um determinado arquivo.

arquivo.txt

[R1P1]
audio=/dev/R1P1_1
data=/dev/R1P1_2
group=2

[R1P2]
audio=/dev/R1P2_1
data=/dev/R1P2_2
group=2

[R1P3]
audio=/dev/R1P3_1
data=/dev/R1P3_2
group=2

[R1P4]
audio=/dev/R1P4_1
data=/dev/R1P4_2
group=2

[R1P5]
audio=/dev/R1P5_1
data=/dev/R1P5_2
group=2

Preciso fazer a alteração de apenas um group, porém sem alterar os demais.
Grato !!!


  


2. MELHOR RESPOSTA

Ryuk Shinigami
Ryuk

(usa Nenhuma)

Enviado em 03/05/2018 - 18:23h

Supondo que queira alter a linha "group=2" apenas depois do termo [R1P3]:
sed '/^\[R1P3\]/!b;n;n;n;c alterar' arquivo.txt 

[R1P1]
audio=/dev/R1P1_1
data=/dev/R1P1_2
group=2

[R1P2]
audio=/dev/R1P2_1
data=/dev/R1P2_2
group=2

[R1P3]
audio=/dev/R1P3_1
data=/dev/R1P3_2
alterar

[R1P4]
audio=/dev/R1P4_1
data=/dev/R1P4_2
group=2

[R1P5]
audio=/dev/R1P5_1
data=/dev/R1P5_2
group=2


3. Re: comando SED linux, alteração de uma determinada linha com conteúdo semelhantes [RESOLVIDO]

Matheus
pylm

(usa Gentoo)

Enviado em 03/05/2018 - 17:14h

Supondo que você queira mudar a linha 4:

sed -i '4s/2/5/' arquivo 


O 4s é o número da linha, 2 é o valor original e 5 é o novo valor.
Faça backup antes.


4. Re: comando SED linux, alteração de uma determinada linha com conteúdo semelhantes [RESOLVIDO]

lucas nascimento
lcscps

(usa Debian)

Enviado em 04/05/2018 - 11:16h

pylm escreveu:

Supondo que você queira mudar a linha 4:

sed -i '4s/2/5/' arquivo 


O 4s é o número da linha, 2 é o valor original e 5 é o novo valor.
Faça backup antes.


Show de bola, as duas sugestões se encaixaram perfeitamente. Agradeço a atenção.


5. Re: comando SED linux, alteração de uma determinada linha com conteúdo semelhantes [RESOLVIDO]

lucas nascimento
lcscps

(usa Debian)

Enviado em 04/05/2018 - 11:21h

Ryuk escreveu:

Supondo que queira alter a linha "group=2" apenas depois do termo [R1P3]:
sed '/^\[R1P3\]/!b;n;n;n;c alterar' arquivo.txt 

[R1P1]
audio=/dev/R1P1_1
data=/dev/R1P1_2
group=2

[R1P2]
audio=/dev/R1P2_1
data=/dev/R1P2_2
group=2

[R1P3]
audio=/dev/R1P3_1
data=/dev/R1P3_2
alterar

[R1P4]
audio=/dev/R1P4_1
data=/dev/R1P4_2
group=2

[R1P5]
audio=/dev/R1P5_1
data=/dev/R1P5_2
group=2




Éra exatamente isso que eu estava tentando, como existe vários arquivos, no exemplo acima não vou saber sempre em qual linha estará , e com esse filtrando exatamente o grupo que eu quero vai se encaixar melhor pra minha necessidade! Agradeço pela atenção.
Se não for pedir muito, conseguiria explicar a logica nesse trecho do comando.. "!b;n;n;n;c" ??


6. Re: comando SED linux, alteração de uma determinada linha com conteúdo semelhantes [RESOLVIDO]

Ryuk Shinigami
Ryuk

(usa Nenhuma)

Enviado em 04/05/2018 - 13:10h

sed '/string/!b;n;n;n;c alterar' arquivo.txt 

Explicando:
/string/ - procura o texto (string) no arquivo;
!b - basicamente vai impedir que qualquer alteração seja feita na linha que contém o "string";
n - vai para a próxima linha, como tem três n vai para a terceira linha depois do "string";
c - substitui toda a linha pelo texto fornecido, no caso "alterar".


7. Re: comando SED linux, alteração de uma determinada linha com conteúdo semelhantes [RESOLVIDO]

lucas nascimento
lcscps

(usa Debian)

Enviado em 07/05/2018 - 22:16h

Ryuk escreveu:

sed '/string/!b;n;n;n;c alterar' arquivo.txt 

Explicando:
/string/ - procura o texto (string) no arquivo;
!b - basicamente vai impedir que qualquer alteração seja feita na linha que contém o "string";
n - vai para a próxima linha, como tem três n vai para a terceira linha depois do "string";
c - substitui toda a linha pelo texto fornecido, no caso "alterar".



Show, muito obrigado.







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts