【问题标题】:how to escape the pipe character in grep?如何在grep中转义管道字符?
【发布时间】:2014-07-09 10:46:26
【问题描述】:

我有一个这种格式的文件:

coupait ||| eastern ||| 0.045454545454545456 2.718 ||| 0-0 ||| 
instaurer ||| characteristic ||| 5.797101449275362E-4 2.718 ||| 0-0 |||
tiendrait ||| fails ||| 0.005 2.718 ||| 0-0 |||

我想搜索一对保存在两个变量中并由|||分隔的单词。 我徒劳地尝试了许多替代方法,例如:

grep "$word1 ||| $word2 |||" $file

我尝试像这样转义管道字符:

grep '$word1 \|\|\| $word2 \|\|\|' $file

如何匹配文件中的管道?

【问题讨论】:

    标签: shell grep escaping pipe


    【解决方案1】:

    使用grep -F - 变量将由shell 解释并替换为它们各自的值,然后引用的字符串(包括管道)将被解释为固定字符串。示例:

    $ cat file.txt
    coupait ||| eastern ||| 0.045454545454545456 2.718 ||| 0-0 ||| 
    instaurer ||| characteristic ||| 5.797101449275362E-4 2.718 ||| 0-0 |||
    tiendrait ||| fails ||| 0.005 2.718 ||| 0-0 |||
    $ word1=coupait
    $ word2=eastern
    $ grep -F "$word1 ||| $word2 |||" file.txt
    coupait ||| eastern ||| 0.045454545454545456 2.718 ||| 0-0 ||| 
    

    【讨论】:

    • 将搜索词放在引号中对我有用。谢谢。
    • 我绝对推荐-F 选项,以便轻松转义模式内的各种字符。在这里,我引用你在做man grep 时可能会发现的定义:-F Interpret PATTERN as a list of fixed strings (instead of regular expressions), separated by newlines, any of which is to be matched. 在我看来,非常友好和美丽:)。
    猜你喜欢
    • 2016-07-24
    • 1970-01-01
    • 2014-06-03
    • 2013-03-21
    • 2018-07-24
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    相关资源
    最近更新 更多