substituir linhas em um texto com texto correspondente

1

Arquivo original

123|abc|heloo good morning friends|1|123|abc|123|abc
123|abc|heloo good morning everyone|1|123|abc|123|abc

Arquivo substituído

123|abc|heloo good morning freinds|1|123|abc|123|abc
123|abc|this is what i want to see|1|123|abc|123|abc

Aqui, como você pode ver, o separador é | . Agora, se algum bloco contiver a palavra "todos", esse bloco em particular deve ser alterado para "isto é o que eu quero ver".

    
por user79135 30.07.2014 / 12:16

2 respostas

4

Basta percorrer os campos e verificar se eles correspondem ou não:

awk 'BEGIN{FS=OFS="|"}
     {for (i=1; i<=NF; i++)
           if ($i ~ "everyone") $i="this is what i want to see"
      print}' file

Veja a saída:

$ awk 'BEGIN{FS=OFS="|"} {for (i=1; i<=NF; i++) if ($i ~ "everyone") $i="this is what i want to see"; print}' file
123|abc|heloo good morning friends|1|123|abc|123|abc
123|abc|this is what i want to see|1|123|abc|123|abc

De uma maneira mais idiomática, a condição if pode ser escrita como ($i ~ "everyone") && $i="this is what i want to see" e depois usar uma condição verdadeira para imprimir as linhas:

awk 'BEGIN{FS=OFS="|"} {for (i=1; i<=NF; i++) ($i ~ "everyone") && $i="this is what i want to see"} 1' file
    
por 30.07.2014 / 12:29
1
sed 's/[^|]*everyone[^|]*/this is what I want to see/g' <<\DATA
123|abc|heloo good morning friends|1|123|abc|123|abc                       
123|abc|heloo good morning everyone|1|123|abc|123|abc
DATA

OUTPUT

123|abc|heloo good morning friends|1|123|abc|123|abc
123|abc|this is what I want to see|1|123|abc|123|abc

Corresponde a qualquer ocorrência de todos e toda a sequência à esquerda ou à direita até, mas não incluindo o separador | . Então, os trabalhos acima. Mas o mesmo acontece:

sed 's/[^|]*everyone[^|]*/replace/g' <<\DATA
everyone|everyevery|every|one|                                             
everyone|everyone|heloo good morning everyone|everyone|123|abc|123|abc
DATA

OUTPUT

replace|everyevery|every|one|
replace|replace|replace|replace|123|abc|123|abc
    
por 30.07.2014 / 12:22

Tags