2013-09-03 9 views
5

Ich habe folgendes data.txt:Sed, um alles nach "." in Datei mit * Befehl?

95 flour. 
47 water.s 
etc.. 

ich alles nach der Zeit entfernen müssen. in der Datei etwas wie folgt zu erhalten:

95 flour 
47 water 
etc.. 

ich die Verwendung dieser sed Befehl ohne Erfolg versucht haben, die ein leeres Dokument ergeben:

sed "s/'.*//" data.txt > cleaned.txt 
sed 's/\.*//' data.txt > cleaned.txt 

Antwort

11

Entweder die . mit einem Backslash eine wörtliche . zu bekommen, oder Klammern verwenden, um eine Zeichenklasse zu definieren:

sed 's/\..*$//' data.txt > cleaned.txt 
sed 's/[.].*$//' data.txt > cleaned.txt 

Sie 's/\.*//' versucht, die „Null oder mehr wörtliche Punkte“ ist, die anders ist von "Literal Punkt gefolgt von Null oder mehr von allem", dh 's/\..*//'. Ich fügte auch eine $ für gutes Maß hinzu.

+0

Ich sehe, wo ich falsch gelaufen bin. Vielen Dank! – Novice

0

Dies schien zu funktionieren:

sed "s/[.].*//" data.txt > cleaned.txt 

Ich wäre interessiert zu wissen, wie dies alternativ in bash und python getan werden kann, wenn jemand nichts dagegen hätte, teilen?

Danke!

+0

Der nicht-sed Weg wäre 'cut -d. -f1' –

4

Dies ist die einfachste:

sed "s/\..*//" 

Und das ist, glaube ich, eine der besten Möglichkeiten, es (besser als reiner bash oder Python) zu tun.

+0

Einverstanden. Vielen Dank! – Novice