2013-09-03 18 views
5

Mam następujący dane.txt:Sed, aby usunąć wszystko po "." w pliku za pomocą polecenia *?

95 flour. 
47 water.s 
etc.. 

trzeba usunąć wszystko po okresie. w pliku uzyskując coś takiego:

95 flour 
47 water 
etc.. 

Próbowałem przy użyciu tych sed polecenie bez sukcesu, które dają pusty dokument:

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

Odpowiedz

11

Albo uciec . z backslashem uzyskać dosłowne ., lub użyć nawiasów, aby zdefiniować klasę postaci:

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

Próbowano 's/\.*//', która jest „zero lub bardziej dosłowne kropki”, który jest różny z "literalnej kropki, po której następuje zero lub więcej czegokolwiek", tj. 's/\..*//'. Dodałem również $ dla dobrego pomiaru.

+0

Widzę, gdzie popełniłem błąd. Dziękuję Ci! – Novice

0

wydawało się działać:

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

Byłbym zainteresowany wiedzieć, jak można to zrobić alternatywnie w bash i python, czy ktoś nie miałby nic przeciwko dzieleniu się?

Dzięki!

+0

Innym sposobem będzie "cut -d". -f1' –

4

Jest to najprostsza:

sed "s/\..*//" 

I to jest, moim zdaniem, jeden z najlepszych sposobów na to robić (lepiej niż czysta bash lub Python).

+0

Uzgodnione. Dziękuję Ci! – Novice

Powiązane problemy