Substitua “-from” por “this” no início da linha

1

Eu quero substituir "-from" por "this" no início da linha. Isso deve acontecer quando a linha tiver 'R' no final e a linha acima tiver "D" no final.

Por exemplo, para o bloco mostrado abaixo:

-from XXXXXXXXXXXXXXXXX/D   
-from XXXXXXXXXXXXXXXXX/R   
-from XXXXXXXXXXXXXXXXX/K   
-from XXXXXXXXXXXXXXXXX/L   
-from XXXXXXXXXXXXXXXXX/G   
-from XXXXXXXXXXXXXXXXX/R 

a saída deve se parecer com:

-from XXXXXXXXXXXXXXXXX/D   
-this XXXXXXXXXXXXXXXXX/R   
-from XXXXXXXXXXXXXXXXX/K   
-from XXXXXXXXXXXXXXXXX/L   
-from XXXXXXXXXXXXXXXXX/G   
-from XXXXXXXXXXXXXXXXX/R  

Está tudo bem, sed , awk , grep , etc.

    
por Rana Khan 14.11.2013 / 00:04

2 respostas

6

  • Quando a linha anterior tiver D no final,
    • e quando a linha atual tiver R no final,
      • a primeira palavra ( -from ) deve ser substituída por -this .

awk script:

# if the prev. line ended with D, and the current with R, replace first word
# optionally add && $1 == "-from"
has_d && /R$/ { $1 = "-this"; }
# print the current line, pretend that d is not matched yet
{ print; has_d = 0; }
# if line ends with D, set flag
/D$/ { has_d = 1; }

Um forro:

awk 'has_d&&/R$/{$1="-this"}{print;has_d=0}/D$/{has_d=1}' yourfile
    
por 14.11.2013 / 00:13
1

Em sed :

sed '/D$/{N;/R$/s/\n-from/\n-this/}' your_file

Expandido com comentários:

sed ' /D$/{                          # If the current line ends in D
            N;                       # Append the next line to the pattern space
            /R$/s/\n-from/\n-this/   # If you find R at end-of-line, substitute
      }' your_file
    
por 14.11.2013 / 10:50

Tags