2015-11-17 13 views
7

come faccio questo in vi?vi rimangono solo i primi 10 caratteri di una colonna

awk -F"," awk '{print substr($1,1,10)}' 

voglio solo mantenere i primi 10 caratteri della mia colonna della data (ad esempio 2014/01/01) e non include il timestamp.

ho cercato di farlo in awk, ma ho ottenuto questo errore:

sed: RE error: illegal byte sequence 

Credo che sia un errore di impostazione bash_profile.

Questo è quello che ho nel mio bash_profile:

#export LANG=en_US.UTF-8 
#export LOCALE=UTF-8 

export LC_CTYPE=C 
export LANG=C 
+1

È estremamente improbabile che 'awk' abbia generato il messaggio di errore' sed: RE error: illegal byte sequence'. Ripulisci la tua domanda per essere accurata e mostra l'input del campione E l'output previsto. Perché vuoi farlo in 'vi' comunque? –

+0

In caso di problemi con le impostazioni locali, è possibile provare 'LC_ALL = C awk '{print substr ($ 0,1,10)}' file> output'. – ryuichiro

risposta

9

in vim, do:

:%norm! 11|D 

Questo influenzerà tutte le linee nel buffer.

Se ti piace, :s potrebbe fare anche questo lavoro.

+0

dove si specifica la colonna? – jxn

+3

@jxn C'è un numero magico '11' nel comando sopra. Cosa potrebbe significare? –

+0

Forse nel contesto dato '10l'è più facile di' 11 | ' –

5
:%s/.\{,10}\zs.*// 

  • :%s/: applicare la sostituzione di tutte le linee
  • .\{,10}: abbinare qualsiasi cosa fino a 10 volte (avidi)
  • \zs: indica l'inizio della partita
  • .* : corrisponde al resto della linea
  • /: fine della prima parte di :s
  • /: fine della seconda parte di s (poiché non c'è nulla fra i due /, sostituirlo con nulla, cioè cancellare)
4

Per modificare blocchi di testo c'è una modalità -- VISUAL BLOCK -- accessibile tramite CTRL-V (su Windows usualmente CTRL-Q). Quindi è possibile premere d per eliminare la selezione.

O con un semplice comando substitute

:%s/\%>10c.*// 
  • \%>10c - incontri dopo decima colonna
  • . - corrisponde a qualsiasi singolo carattere ma non un fine linea
  • * - corrisponde a 0 o più dell'atomo precedente, il maggior numero possibile

Oppure è possibile utilizzare l'intervallo

:1,3s/\%>10c.*// 

Ciò sostituirà le prime tre righe.

Problemi correlati