substituir texto após correspondência

2
aaaaaaaaa   
bbbbbbbbb   
-th ccccccccc_RD \  

DDDDDDDD  
FFFFFFFF  
-th GGGGGGG_RD \

usando sed / grep / awk etc, No texto acima, se uma linha terminar com "RD \", substitua "-th" por "-to" no início da linha. Saída desejada:

aaaaaaaaa   
bbbbbbbbb   
-to ccccccccc_RD \  

DDDDDDDD  
FFFFFFFF  
-to GGGGGGG_RD \

qualquer ajuda é muito apreciada.

    
por Rana Khan 06.11.2013 / 18:54

1 resposta

6

Isso deve funcionar:

sed 's/^-th\(.*RD \\)/-to/' foo.txt

Isso é um pouco complexo porque \ é um caractere especial e precisa ser que escapou . Como o escape é feito por \ , a maneira de corresponder a um literal \ é \ . Os \( e \) estão lá para capturar o padrão correspondente que é então referido como na substituição.

A sintaxe é mais fácil em Perl, pois os parênteses não precisam ser escapados:

perl -pne 's/^-th(.*RD \)/-to$1/' foo.txt

No awk você faria:

awk '/RD \$/{$1="-to"}{print}' foo.txt 
    
por 06.11.2013 / 18:57

Tags