2013-08-26 7 views
5

Ich möchte alle mehrere Registerkarten mit einer einzigen Registerkarte mit sed ersetzen. Ich versucheErsetzen von Registerkarten mit einzelnen Registerkarte in sed

sed 's:\t+:\t:' .\text.CSV > newtext.csv 

zu verwenden, aber dies scheint nicht

zu arbeiten, wenn ich erhaben öffnen und ersetzen durch regex alle \t+ zu \t es richtig

was funktioniert, ist falsch mit meiner sed?

Auch, wenn ich Tabs mit einem Komma mit

sed 's:\t\t*:,:g' text.CSV > newtext.csv 

ersetzen erhalte ich diese Art von Linie

264262360,20030826,200308,2003,2003.6466,BUS,EMPLOYER,,,,,,BUS,,, ,,,,,,,,,,0,051,051,05,1,3.4,12,2,12,5.24866163479182,1 
+1

Denken Sie daran, verwenden könnten '+' bedeutet ein oder mehr so ​​kann auch geschrieben werden '\ t \ t *' – potong

+0

Wenn '\ t' nicht funktioniert, versuchen Sie es mit [Strg] - [v] [Tab] ([siehe diese Antwort] (http://stackoverflow.com/questions/6392249/how-to-enter-a-tab-char-on-command-line)) wenn Sie in einem a * nix-Terminal arbeiten. Das Kopieren und Einfügen eines Tab-Zeichens könnte funktionieren, aber in meinem Terminal wurden Registerkarten durch vier Leerzeichen ersetzt. –

Antwort

11

Sie auch tr können mehrere Tabs mit einem einzigen ersetzen:

tr -s '\t' '\t' <inputfile> outfile 

Die -s Option quetscht Wiederholungen:

es, --squeeze-Wiederholungen

 replace each input sequence of a repeated character that is 
     listed in SET1 with a single occurrence of that character 
+2

HINWEIS, dass 'tr -s '\ t'' ausreicht, um zu quetschen, das zweite' \ t'' ist nicht notwendig. – fedorqui

7

Verwenden -r Option und g Flagge:

sed -r 's:\t+:\t:g' text.CSV > newtext.csv 

-r zu machen + zu arbeiten.

g Flag, um alle Vorkommen zu ersetzen.

UPDATE

Wenn Ihr sed nicht -r Option nicht unterstützt, versuchen Sie folgende statt:

sed 's:\t\t*:\t:g' text.CSV > newtext.csv 
+0

funktioniert das nicht für mich ... könnte es sein, dass meine sed kaputt ist? –

+0

@NickGinanto, Welches Betriebssystem verwenden Sie? – falsetru

+0

Ich versuche Win7 mit Powershell. Versuchen Sie auch dies mit Cygwin –

0

Sie auch

sed "s/\t\+/\t\g" test.csv >> newtest.csv