【问题标题】:Find exact word in file using egrep in bash在 bash 中使用 egrep 查找文件中的确切单词
【发布时间】:2013-12-25 23:15:47
【问题描述】:

我有一个名为F1 的文件。 F1 包含

你好 abc@ 啊啊啊啊啊

现在,我想检查 abc 是否在文件 F1 中。

运行以下命令后

find $dir -type f -exec egrep -w "abc" {} \;

这是我得到的输出

你好 abc@

由于某种原因,还发现了 abc@ 这个词。 (我在找abc。)

【问题讨论】:

标签: linux bash


【解决方案1】:

应该这样做:

egrep '(^| )abc( |$)' F1

它寻找abc 被空格或行开头/结尾包围。

【讨论】:

    【解决方案2】:

    您可能正在使用 GNU egrep - -w 选项不是 POSIX 标准的一部分 - 及其手册页状态

    -w, --word-正则表达式 只选择那些包含形成整体的匹配的行 字。测试是匹配的子字符串必须是 在行首,或前面有一个非单词 构成性状。同样,它必须在末尾 行的或后跟非单词组成字符。 构成单词的字符是字母、数字和 下划线。

    所以@ 被认为是一个非单词组成字符,就像,. 和 空格。

    如果您对单词分隔符有什么想法,请告诉我们 我们可以为您制作一个正则表达式。

    【讨论】:

    • 你完全正确。我知道'@'是一个非单词。空格是单词分隔符。
    • 所以它告诉你有一个匹配,因为有一个。您正在寻找“abc”这个词。由于@ 不被视为单词的一部分,因此它会将abc@ 视为您要查找的单词“abc” - 后面紧跟着@,但这不会改变任何事情。那么究竟什么才是适合你的呢?
    • David,如果您的文件包含字符串 abc.abc!abc#abc%abc*abc,abc-abc?,其中您希望egrep -w 找到其中的哪些,您希望它忽略哪些?
    • 我不认识马克。我所知道的是,我希望能够通过给定的两个输入找出答案:一个文件路径和一个单词,天气与否,这个单词是否在给定的文件中。
    • 这应该工作 find $dir -type f -exec grep -v [[:punct:]] {} \; | grep abc
    【解决方案3】:
    find $dir -type f -exec grep -v [[:punct:]]  {} \; | grep -ow abc
    

    【讨论】:

    • 不,仍然找到'abc@'。
    • 不可能我得到这个 [root@rhce sto]# find 。 -type f -exec egrep -o "abc" {} \; abc
    • 我得到的输出是:'abc'。但它不应该给出任何输出。因为我正在寻找 F1 中不存在的单词。
    • 对不起,根据您的问题,您只是在寻找“abc”这个词?
    • 我想知道天气或文件 F1 中是否存在单词“abc”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多