
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_1
ele 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 sed
implementações possuem uma -i
opção inspirada na opção perl
de -i
:
sed -i 's/[[:space:],]*$//' input-and-output # GNU, busybox, NetBSD, OpenBSD
sed -i '' 's/[[:space:],]*$//' input-and-output # FreeBSD, macOS