Não é sed, mas aqui está uma solução usando asserção lookbehind negativa (?<!...)
em perlre.
perl -pe 's/(?<!\d\d-(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)-\d\d) //g'
Eu queria remover espaço em branco de um arquivo CSV, o que eu posso fazer usando s/\ //g
, mas ao mesmo tempo eu quero evitar a remoção do espaço entre os campos que tem registros de data e hora, por exemplo "06-JAN-15 13:20:00"
: atualmente associa-se a eles, o que era esperado "06-JAN-1513:20:00"
.
Uma solução é permitir que ela exclua todos os espaços em branco e, em seguida, grep para a data 06-JAN-15
e adicione espaço após ela. Não tenho certeza de como isso pode ser feito.
Exemplo de arquivo CSV: (apenas uma linha)
294335,"17-APR-15 00:00:00 ",6258,"C"," <-----huge blank space--->,"07-JAN-15 00:00:00"
huge blank space
conterá mensagem XML, se não estiver em branco.
Não é sed, mas aqui está uma solução usando asserção lookbehind negativa (?<!...)
em perlre.
perl -pe 's/(?<!\d\d-(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)-\d\d) //g'
Usando awk
:
< input awk 'BEGIN {FS=OFS=","} {gsub(" ", "", $1); gsub(" ", "", $3); gsub(" ", "", $4); gsub(" ", "", $5); print}'
Isso terá o efeito de remover qualquer caractere de espaço do primeiro, terceiro, quarto e quinto campos separados por vírgula em cada registro.
Você pode realmente analisar o arquivo como um arquivo CSV e retirar espaço em branco extra:
ruby -rcsv -ne '
row = CSV::parse_line($_)
puts CSV::generate_line(row.map {|field| field.strip})
' file
294335,17-APR-15 00:00:00,6258,C,"",07-JAN-15 00:00:00
Tags sed csv-simple