【问题标题】:How to grep non-keyboard charaters?如何grep非键盘字符?
【发布时间】:2013-09-25 03:46:42
【问题描述】:

我正在尝试使用grep 来获取目录下的所有μs,不幸的是,μ 不是键盘字符,有什么想法吗? 顺便说一句,对于普通的键盘单词,我可以使用

find / -type f -print | xargs grep -inE <search_word> 2>/dev/null

找出所有包含搜索词的纯文本文件。

【问题讨论】:

    标签: linux grep


    【解决方案1】:

    您介意使用 sed 代替 grep 吗?

    sed -n '/\xb5/p'
    

    但是 grep 也应该可以工作:

    grep -P '\xb5'
    

    【讨论】:

    • 您好弗拉德,感谢您的回复。我尝试了你的两种方法,我得到了很多返回的结果,其中一些是不想要的。但是,我可以使用管道根据返回结果 grep 来获得我想要的结果。
    • 我想我应该说:grep -P '\xb5s' (到 grep μs,而不仅仅是 μ);)
    【解决方案2】:

    在 Bash 中,您可以使用 shell 的引用功能来传递非 ASCII 内容。为了正确识别搜索字符串,我们需要知道您正在搜索的文件的编码。如果它们是 UTF-8 格式,您需要一个不同于 ISO-8859-1 或 UTF-16 格式的搜索字符串。

    如果您的 shell 的语言环境与文件的内容一致,那么这一切都应该是开箱即用的,但这里有几个解决方法。

    # grep ISO-8859-1 \xB5
    grep $'\xB5' file
    
    # grep UTF-8 U+03BC
    grep $'\xCE\xBC' file
    
    # grep UTF-16be U+03BC
    grep $'\x03\xBC' file
    
    # grep UTF-16le U+03BC
    grep $'\xBC\x03' file
    

    一些旧版本的grep 存在非ASCII 字符的问题;作为一种解决方法,您也可以使用 Perl。

    perl -ne  'print if m/\u03BC/' file
    

    您可能需要使用Perl's Unicode facilities 才能使其正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-05
      • 1970-01-01
      • 2011-04-26
      • 2011-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多