Camarada,
No caso em questão, eu tenho duas linhas que não se repetem em sequência. E
depois de minha edição,
nunca mais ficarão uma seguida da outra.
É como se fosse dois limitadores para eu inserir coisas no meio, compreende?
Aliás, elas não podem se repetir em sequência. E se houver repetição... Hehe
Vai dar muita merda
para tudo quanto é lado. * batendo três vezes na madeira *
Mesmo assim, acrescentei o ":a" e "Ta" no SED aqui.
Ok, você está correto. Então suponhamos um possível cenário de erro no arquivo
original:
£ cat >> testeComErro << EOT
LINHAS
LINHAS
LINHAS
AAA
BBB
LINHAS
LINHAS
AAA
AAA
EEE
LINHAS
LINHAS
AAA
EEE
LINHAS
LINHAS
AAA
CCC
EOT
Como evitar que o sed inclua as três linhas entre as duas ocorrências de "AAA" e
"EEE" encontradas?
...
Depois de bater cabeça, ler o
http://unixhelp.ed.ac.uk/CGI/man-cgi?sed
e
http://stackoverflow.com/questions/11024245/sed-recipe-how-to-do-stuff-between-two-patterns-that-can-be-either-on-one-line#11048145
cheguei na solução:
£ sed ':a;/^AAA$/{n;s/^EEE$/BBB\nCCC\nDDD\n&/;Ta;:b;$!{N;bb};q}' testeComErro
O estranho é que a estrutura geral do arquivo de entrada foi mantida. Mas
repare a saída com o diff.
Em teoria, ele só deveria demonstrar a alteração entre o primeiro "AAA" seguido de
"EEE". No entanto:
£ diff -y teste <(sed
':a;/^AAA$/{n;s/^EEE$/BBB\nCCC\nDDD\n&/;Ta;:b;$!{N;bb};q}' testeComErro)
Dessa vez eu fiquei sem saber se eu acertei ou errei...
Em 12 de outubro de 2014 01:18, Ronaldo Ferreira de Lima address@hidden
<mailto:address@hidden> [shell-script] <address@hidden
<mailto:address@hidden>> escreveu:
__
On Sat, Oct 11, 2014 at 11:23:48PM -0300, Jimmy Isaac Neutron wrote:
[...]
> Você pode resumir para:
>
> $ sed '/^AAA$/{n;s/^EEE$/BBB\nCCC\nDDD\n&/}' teste
Putz! Lembrei de uma caso onde essa solução irá quebrar:
AAA
BBB
AAA
AAA
EEE
AAA
AAA
AAA
EEE
AAA
CCC
Seria possível apenas ajustar a solução anterior para:
$ sed ':a;/^AAA$/{n;s/^EEE$/BBB\nCCC\nDDD\n&/;Ta}' teste
Neste caso, quando "próxima linha" após "AAA" não for "EEE", retesta o
pattern space corrente (que pode ser mais um "AAA" ou múltiplos). A
solução fica mais genérica mas não é possível afirmar que será
infalível. O ideal é avaliar o cenário que você tem e não o que acha
ter. Em muitos casos, eu primeiro crio hipóteses para testá-las contra o
input e apenas crio scripts/programas baseados nas "certezas" que os
testes forneceram sobre os dados.
[]'s
--
"Não manejo bem as palavras
Mas manipulo bem as strings."
------------------------------
http://tecnoveneno.blogspot.com