sed + substituir apenas a segunda palavra de correspondência

1

temos o seguinte arquivo:

more /tmp/file

Allow,Deny
Allow,Deny

queremos alterar apenas a segunda palavra de correspondência (para substituir Permitir, Negar com Negar, Permitir)

então fizemos

sed 's/Allow,Deny/Deny,Allow/1'  /tmp/file

Deny,Allow
Deny,Allow

mas substitui ambos

enquanto os resultados esperados:

Allow,Deny
Deny,Allow

como substituir apenas a segunda palavra de correspondência

    
por yael 08.11.2017 / 11:32

2 respostas

0

to change only the second match word ( to replace Allow,Deny with Deny,Allow )

sed solução:

Amostra tmp_file :

Allow,Deny
Allow,Deny
Allow,Deny
Allow,Deny
sed ':a;N;$!ba; s/Allow,Deny/Deny,Allow/2' tmp_file

A saída:

Allow,Deny
Deny,Allow
Allow,Deny
Allow,Deny
    
por 08.11.2017 / 11:37
0

Outra solução sed.

sed '0,/Allow/!{0,/Allow/s/Allow/Deny/}' /tmp/file

Aqui combinamos o primeiro Allow , então ignoramos a substituição do primeiro Allow que encontramos e substituímos a próxima linha.

Para ter uma ideia, o seguinte substitui o segundo e o quarto, já que usamos N;

sed '0,/Allow/!{N;/Allow/s/Allow/Deny/}'

Ou usando awk :

awk '/Allow/{c++; if (c==2) { sub("Allow","Deny")}}1'

Combinamos Allow e, em seguida, mantemos um contador c . Se isso corresponder à ocorrência de 2 second, substituímos.

    
por 08.11.2017 / 11:58