UltraEdit - substituição de expressões regulares

1

Eu estava tentando muitas combinações diferentes sem sucesso, neste momento eu ficaria muito grato por sua ajuda.

Eu preciso substituir este fim de linha várias vezes (em torno de 300) e seria doloroso substituí-lo um por um:

:;XXXXXX (lenght may vary)

Consegui encontrá-lo com :;*$ , o que destaca exatamente o que preciso! Mas não consigo substituí-lo, para que fique assim: :;XXXXXX;;;

* - deve corresponder a qualquer coisa (e funciona)

$ - deve corresponder ao fim da linha (e funciona)

Eu tentei encapsular * entre parênteses (*); [*] ... como :;(*);;;$ entre outras coisas, mas sem sucesso. É claro que a substituição é feita, mas da mesma forma que a entrada. Por exemplo ... em vez de :;XXXXXX;;; , recebo :;*;;; - e é o melhor que consegui tirar dela.

Este é o formato de expressão regular UltraEdit, mas este software também pode processar expressões regulares Unix e Perl.

Eu posso sugerir QUALQUER maneira de fazer isso, vou tentar (terminal, outro software, etc.).

EDITAR:

Estou tentando obter contatos do nokia antigo para o nokia mais novo (s30 + series). Houve apenas backup.nbu do qual eu tenho contatos .vcf. Eu os coloquei em um arquivo via cat *.vcf > combined.vcf . Eu encontrei o Excel macro e PHP script que deveriam fazer todo o processo, mas eles didn'work - mas tudo isso não é tão relevante, eu acho. Depois disso, encontrei o formato Vcard que esse modelo específico pode processar. Agora estou tentando modificá-lo, para parecer o mesmo. Substituir linhas não foi problema, mas eu preciso editar as extremidades. ;:NAME to ;:NAME;;; sem modificar nomes ...

Eu tentei o que descrevi acima. Depois disso, tentei sugerir sed -ri "s/\:\;X+$/&\;\;\;/g" .

Eu acho difícil que o DOS termine com as linhas pode ser o problema, então eu corri: sed -i 's/\r//g' combined.vcf e então novamente o comando sid sugerido.

FROM: N;CHARSET=UTF-8;ENCODING=8BIT:ALFA

TO: N;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:;ALFA;;;

EDIT2:

Então eu fui desde o começo ...

  1. Combinei arquivos .vcf

  2. Abriu-os no UltraEdit e salvou como LF (do CRLF) - tentou desta vez sem sed e terminal

  3. No find replace eu selecionei Perl Regex

    • Localizar (:;)(.*)

    • Substitua ;;;

Para referência: .* - Corresponde zero ou mais de qualquer caractere (exceto nova linha) ...

FEITO!

    
por RiddleMeThis 06.06.2015 / 11:47

2 respostas

1

O que você precisa é chamado de back-references. Isso significa " colocar aqui o que foi selecionado na partida " e funciona por:

  1. Usando parênteses na regex correspondente para selecionar uma parte da string,
  2. Usando uma referência anterior numerada ( para o primeiro parêntese, para o segundo, etc.).

sed suporta isso e isso produz o seguinte comando ( sed exige que o parêntese seja escapado, mas isso pode não ser o caso de outro software baseado em regex):

sed -i 's/^\(:;.*\)$/;;;/' combined.vcf
    
por 06.06.2015 / 12:58
0

Usando sed , isso pode ser feito assim:

echo ":;XXXXXX" | sed -re "s/\:\;X+$/&\;\;\;/g"

Como você está pegando os dados de algum arquivo, você pode editá-lo diretamente dentro do arquivo usando:

sed -ri "s/\:\;X+$/&\;\;\;/g" file.txt
    
por 06.06.2015 / 12:03