使用Sed命令在文件中使用*来删除"."后面的所有内容?

24

我有以下的 data.txt 文件:

 95 flour.
 47 water.s
 etc..

我需要从文件中删除句点(.)后面的所有内容,以得到像这样的结果:

 95 flour
 47 water
 etc..

我尝试了使用这些sed命令,但没有成功,结果只得到一个空文件:

sed "s/'.*//" data.txt > cleaned.txt 
sed 's/\.*//' data.txt > cleaned.txt 
3个回答

38

要么使用反斜杠转义.以获得字面上的.,要么使用方括号定义字符类:

要么使用反斜杠转义.以获得字面上的.,要么使用方括号定义字符类:
sed 's/\..*$//' data.txt > cleaned.txt
sed 's/[.].*$//' data.txt > cleaned.txt
您尝试的是's/\.*//',它表示"零个或多个点字符",与"一个点字符后面跟随零个或多个任意字符"不同,即's/\..*//'。为了保险起见,我还添加了一个$

14

这是最简单的例子:

sed "s/\..*//"

我认为这是最好的做法之一(比纯粹的bash或Python更好)。


1
这似乎有效:


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

如果有人愿意分享的话,我会很感兴趣知道如何在bash和python中以其他方式完成这个任务。

谢谢!


2
非sed的方法是 cut -d. -f1 - that other guy
2
也许这已经不再是问题了,但如果您想在Python中使用它,可以使用 str.split(".")[0] - Revan
所有的答案都是使用BASH的方法,无论是在命令行还是脚本中。 - Jesse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接