Pergunta sobre limpeza de dados - expressão regular para remover combinações de espaços e vírgulas à direita

Pergunta sobre limpeza de dados - expressão regular para remover combinações de espaços e vírgulas à direita

Eu tenho sequências de endereços que (devido à má programação inicial) permitiam muita entrada de texto livre. Ao limpar essa bagunça herdada, percebi que, no final dos campos de endereço, há frequentemente (e frequentemente não) vírgulas das quais desejo me livrar.

O problema é que (novamente, frequentemente!) aqueles que inserem os dados (pagos por linha...) inserem strings como:

`address_1_string  ,  `

Isso é address_1_string seguido por dois espaços seguidos pela vírgula que desejo excluir, seguido por mais dois espaços. O número de espaços (antes ou depois da vírgula) é arbitrário, normalmente variando de 0 a 5. O problema é ainda agravado pelo fato de que address_string_1ele próprio pode ter vírgulas internas (válidas).

Então, o que estou procurando é uma expressão regular que vá até o final da linha, exclua todos os espaços finais, a primeira vírgula e depois mais espaços até que um [a-zA-Z0-9] ([:alphanum: ]?) caractere for encontrado.

Tenho noções de expressões regulares, mas isso está acima do meu nível salarial. Este é meu primeiro post no Stackexchange, então se eu estiver no lugar errado, redirecione-me. TIA.

Responder1

< input sed 's/[[:space:],]*$//' > output

Excluiria todos os caracteres de espaçamento e vírgula no final da linha.

Para editar o arquivo no local, algumas sedimplementações possuem uma -iopção inspirada na opção perlde -i:

sed -i 's/[[:space:],]*$//' input-and-output    # GNU, busybox, NetBSD, OpenBSD
sed -i '' 's/[[:space:],]*$//' input-and-output # FreeBSD, macOS

informação relacionada