Procurando uma expressão regular para trabalhar em uma lista de valores separados por vírgula

7

Eu tenho uma linha de 3 números longos separados por vírgula. O que eu quero fazer é excluir o número no meio e deixar apenas o primeiro número e o último número separados por uma vírgula.

Atualmente:

123456789123,723456789123456,834567885544334
123456789125,723456789123457,834567885544333
123456789126,723456789123458,834567885544337

Resultado desejado:

123456789123,834567885544334
123456789125,834567885544333
123456789126,834567885544337

Eu tentei fazer isso, mas não funcionou com essas expressões regulares:

  • expressão regular para encontrar uma string: %[0-9]+,[0-9]+,[0-9]+
  • expressão regular para substituir string: ^1,^2

Qual expressão regular realmente faz o que eu quero alcançar?

Nota - Atualmente estou usando um aplicativo chamado Ultraedit que roda no Windows 7, se você recomendar um aplicativo de edição de texto melhor para o Windows que possa resolver o meu problema, por favor me avise.

    
por user836026 01.08.2012 / 12:41

4 respostas

10

Você pode simplesmente substituir o número do meio de cada linha por nada.

No editor

Ou seja, no seu editor, pesquise e substitua o regex

,[0-9]+,

(que corresponde apenas a números com vírgulas em ambos os lados, que, para sua entrada, é apenas o número do meio) com uma única vírgula:

,

Eu assumo que o Ultraedit suporta regex search-and-replace. Se não, tente o Notepad ++, que eu sei faz.

Na linha de comando

Desde que você marcou sua pergunta shell script , aqui está como fazer isso a partir da linha de comando.

sed

Use sed , um comando padrão do Linux também disponível para Windows como parte do Cygwin ou do GnuWin32:

C:\>sed -e 's/,[0-9]+,/,/g' filename.txt

Powershell

Jens apontou que você também pode fazer isso no Windows Powershell; veja esta explicação .

    
por 01.08.2012 / 12:50
3

A sintaxe Regex varia de aplicativo para aplicativo. Eu não estou familiarizado com o Ultredit e vou dar um generaql anser

Seu regex não tem parênteses de captura

([0-9] +), [0-9] +, ([0-9] +)

    
por 01.08.2012 / 12:55
2

Para substituir o texto, é necessário codificar a subexpressão apropriada usando parênteses.

No UltraEdit, você deve procurar pela seguinte expressão regular:

 %^([0-9]+^),[0-9]+,^([0-9]+^)
    
por 01.08.2012 / 12:53
2

Awk Equivalent!

echo "$Variable" | awk 'FS="," { print $1","$3 } '

    
por 01.08.2012 / 18:03