Wie kann ich nur das erste Leerzeichen aus einer Zeile wie der folgenden entfernen, ohne die anderen Leerzeichen in derselben Zeile zu entfernen?
Beispiel Eingabe:
2015-04-18 10:21:59 10 05430 -9999 -9999 000000000000
Beispielausgabe:
2015-04-1810:21:59 10 05430 -9999 -9999 000000000000
bash
text-processing
ThehalfarisedPheonix
quelle
quelle
Antworten:
Verwenden von
awk
:Die Ausgabe:
Sie können jedes Leerzeichen in der Zeile entfernen und jedes behalten
Angenommen : Die Eingabedatei muss enthalten:
Wenn eine dieser Annahmen verletzt wird, ist das Ergebnis nicht korrekt
quelle
sub()
Funktion verwenden können, die nur die erste Übereinstimmung in der Zeile entfernt, sodass Ihr langer awk-Ausdruck aufawk '{sub(/ /,"")};1' input.txt
Sie können dafür verwenden
sed
:Dies wendet eine Ersetzung auf alle Zeilen der Datei an
infile
, die das erste Leerzeichen durch nichts ersetzen (dh entfernen). Die Ausgabe wird in der Datei gespeichertoutfile
. Mitsed 's/ //N'
, woN
eine Ganzzahl zwischen 1 und 9 liegt, können Sie auswählen, welches Leerzeichen entfernt werden soll.Wenn sich die Zeile in einer Shell-Variablen befindet, können Sie verwenden
Dies verwendet die
${parameter/pattern/string}
Parametererweiterung inbash
, um dasselbe wie dersed
Befehl zu tun , jedoch für den Wert in$var
. Die resultierende Zeichenfolge wird in diesem Beispiel wieder in gespeichert$var
.quelle
Sie können Vim im Ex-Modus verwenden:
%
Wählen Sie alle Zeilen auss
Ersatzx
speichern und schließenquelle
Kleiner und einfacher Perl Einzeiler:
Oder noch einfacher, wie von mik in den Kommentaren vorgeschlagen:
Python kann es auch. Hier ist ein kleines Skript, das die Arbeit erledigt. Bei Bedarf kann es auf einen Einzeiler reduziert werden:
Und da dieselbe Zeile in der Eingabedatei dreimal dupliziert wurde, ist hier ein Test für mehrzeilige Eingaben:
Wenn Sie nur eine einzelne Zeile bearbeitet haben, können Sie dies folgendermaßen tun:
quelle
perl
Oneliner wäreperl -pe 's/ //'
Das ist eine ganz einfache Frage.
sed -i 's/ //' /path/to/file
Versuchen Sie diesen Befehl und fügen Sie am Ende des sed-Ausdrucks kein s hinzu .
Es wird nur das erste Leerzeichen in jeder Zeile entfernt.
quelle
-i
Sie verwenden, können Sie weniger eingeben . Und-i
ist der offiziell empfohlene Weg, wenn Sie nur Textdateien direkt ändern möchten.-e
und sagen, dass es auch anders ist ...