【问题标题】:Sed to remove everything after "." in file using * command?sed 删除“。”之后的所有内容。在文件中使用 * 命令?
【发布时间】:2013-09-03 22:04:04
【问题描述】:

我有以下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 

【问题讨论】:

    标签: bash sed


    【解决方案1】:

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

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

    您尝试了's/\.*//',它是“零个或多个文字点”,它不同于“文字点后跟零个或多个任何东西”,即's/\..*//'。我还添加了一个 $ 以作为衡量标准。

    【讨论】:

      【解决方案2】:

      这是最简单的:

      sed "s/\..*//"
      

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

      【讨论】:

        【解决方案3】:

        这似乎有效:

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

        如果有人不介意分享的话,我很想知道如何在 bash 和 python 中交替完成这项工作?

        谢谢!

        【讨论】:

        • 非sed方式是cut -d. -f1
        • 可能不再是问题,但如果你想在 python 中使用它,你可以使用str.split(".")[0]
        • 所有答案确实都是在 BASH 中实现的方法,无论是命令行还是脚本。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-18
        相关资源
        最近更新 更多