2017-12-07 6 views
1

Ich habe ein Szenario, in dem ich eine Textdatei habe, und ich möchte die Zeilenwerte in der Textdatei mit einem bestimmten Trennzeichen (z. B. :) trennen.So trennen Sie Felder in einer Textdatei mit einem Trennzeichen

Ich habe die Textdatei generiert, indem ich die Ausgabe einer SQL-Abfrage in eine Textdatei gespeichert habe.

Der Inhalt der Textdatei sind

field 1.2  xxxx 
field 2.7.1 xxxx 
field 1.9  xxxx 
field 1.4  xxxx 
field 2.7.1 xxxx 

ich das versucht:

cat /tmp/file.txt | sed 's/ /:/g' 

aber da der Raum nicht konsistent über die Zeilen ist, das ist für mich nicht funktioniert.

Wie kann ich das tun? die Ausgabe, die ich erwarte hier ist so etwas wie dieser

field :1.2 :xxxx 
field :2.7.1 :xxxx 
field :1.9 :xxxx 
field :1.4 :xxxx 
field :2.7.1 :xxxx 
+0

Zugabe vollständig erwartete Ausgabe zu klären helfen würde, Ihre Anforderung .. ab sofort Antworten Sie haben nicht alle die gleiche Ausgabe produzieren. – Sundeep

+0

ja ich habe meine Frage bearbeitet und die erwartete Ausgabe eingefügt – panda

+1

Most SQL-Anwendungen können Ausgaben in computerlesbarer Form mit einer Option speichern. Die gepolsterte Ausgabe, die Sie sagen, dass Sie erwarten, sieht nicht besonders nützlich aus; Ohne das Padding wären Sie wahrscheinlich besser dran, vielleicht mit einem Standardformat wie CSV oder JSON. – tripleee

Antwort

0

Raum-Raum-Stern. Der erste Platz, um zu sagen, dass es einen geben muss, der zweite mit einem Stern, um null oder mehr Extras zu sagen. sed 's/ */:/g'

0

Mit GNU sed, ersetzt zwei oder mehr Räume mit Doppelpunkt:

sed -E 's/ {2,}/:/' file 

oder zweiten String-Matching ein oder mehr Leerzeichen:

sed -E 's/ +/:/2' file 
0

Sie verwenden tr with its "squeeze" option:

$ tr -s ' ' : < input 
field:1.2:xxxx 
field:2.7.1:xxxx 
field:1.9:xxxx 
field:1.4:xxxx 
field:2.7.1:xxxx 

Dies drückt jede Folge von wiederholten Räumen zu einem einzigen, welches dann durch einen Doppelpunkt ersetzt wird.

0
$ sed -E 's/[[:blank:]]+/&:/g' /tmp/file.txt 
field :1.2  :xxxx 
field :2.7.1 :xxxx 
field :1.9  :xxxx 
field :1.4  :xxxx 
field :2.7.1 :xxxx 
  • no need to use cat, akzeptieren viele cli Tools sowohl stdin und Dateieingänge
  • [[:blank:]] Raum und Tab-Zeichen übereinstimmen, wenn Sie wissen, gibt es nur Leerzeichen, verwenden wörtlichen Raum
  • + ein anzupassen oder mehr von Leerzeichen, notieren Sie die Verwendung von -E Option, um ERE zu aktivieren. Einige sed Versionen unterstützt möglicherweise nur -r statt -E
    • Wenn ERE nicht verfügbar ist, verwenden sed 's/[[:blank:]]\{1,\}/&:/g'
  • & Ersatz Abschnitt bezieht sich auf gesamte abgestimmte String
+1

cool..diese Lösung tatsächlich funktioniert..danke viel ... – panda

Verwandte Themen