【问题标题】:grep giving incorrect resultsgrep 给出不正确的结果
【发布时间】:2015-02-20 02:02:24
【问题描述】:

我有一个文本文件,其中包含在行尾具有数值的行。当我执行命令cat *.txt | grep 'MOS-LCNB:1.' 时,我只希望1. 的值,但由于某种原因它显示100.0

MOS-LCNB:1.23
MOS-LCNB:1.41
MOS-LCNB:1.83
MOS-LCNB:100.0
MOS-LCNB:1.19
MOS-LCNB:1.39
MOS-LCNB:100.0
MOS-LCNB:100.0

当我编写 python 脚本并执行 re.search 时,也会出现同样的问题。

【问题讨论】:

    标签: python regex grep


    【解决方案1】:

    这是因为. 匹配除换行符以外的任何字符。

    要匹配文字句点,您需要在其前面加上反斜杠。

    grep 'MOS-LCNB:1\.'
    

    Ideone Demo

    【讨论】:

    • 未来的读者可能有兴趣知道您也可以将文字点与[.] 匹配。有时,避免Leaning Toothpick Syndrome 是件好事。
    【解决方案2】:

    grep(和 Python re.search)给出了正确的结果。不过,您需要了解正则表达式。

    . 表示“任何字符”。要匹配时间段,请使用\.

    cat *.txt | grep 'MOS-LCNB:1\.'
    

    【讨论】:

    • 您不应该将cat 与可以读取数据本身的程序一起使用,例如grep。应该这样做:grep 'MOS-LCNB:1\.' *.txt
    • @Jotne:a) 是的,这样更好。我只是对 OP 的代码进行了最少的编辑,这样它就可以工作了。 b) 为什么“不应该”?当然,它效率不高,而且我通常使用直接形式,但即使你使用管道 cat 也几乎没有什么区别。您是否有因使用 cat 而产生的特定恐怖故事?
    • 它肯定会奏效,但对于所有在这里阅读答案的人来说,最好以最好的方式去做。您可能会失去功能,例如 awks FILENAME。你启动更多的进程,更多的内存,它可能需要更长的时间来执行。
    猜你喜欢
    • 2012-08-27
    • 2017-12-14
    • 2019-03-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 2011-10-27
    • 2011-11-30
    相关资源
    最近更新 更多