2013-09-03 21 views
5

Ho il seguente data.txt:Sed per rimuovere tutto dopo "." nel file usando * comando?

95 flour. 
47 water.s 
etc.. 

ho bisogno di rimuovere tutto ciò dopo il periodo. nel file di cedere qualcosa di simile:

95 flour 
47 water 
etc.. 

Ho provato il usando questi comandi sed senza successo, che produrre un documento vuoto:

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

risposta

11

O sfuggire al . con un backslash per ottenere un letterale ., oppure utilizzare staffe per definire una classe di caratteri:

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

Si è tentato 's/\.*//', che è "zero o più letterali puntini", che è diverso da "punto letterale seguito da zero o più di qualsiasi cosa", ovvero 's/\..*//'. Ho anche aggiunto uno $ per buona misura.

+0

Vedo dove ho sbagliato. Grazie! – Novice

0

Questo sembrava funzionare:

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

Sarei interessato a sapere come questo può essere fatto alternativamente in bash e python, se a qualcuno non dispiacesse condividere?

Grazie!

+0

Il modo non-sed sarebbe 'tagliato -d. -f1' –

4

Questo è il più semplice:

sed "s/\..*//" 

e questo è, a mio avviso, uno dei migliori modi di farlo (meglio di bash pura o Python).

+0

Concordato. Grazie! – Novice

Problemi correlati