【发布时间】:2013-09-25 03:46:42
【问题描述】:
我正在尝试使用grep 来获取目录下的所有μs,不幸的是,μ 不是键盘字符,有什么想法吗?
顺便说一句,对于普通的键盘单词,我可以使用
find / -type f -print | xargs grep -inE <search_word> 2>/dev/null
找出所有包含搜索词的纯文本文件。
【问题讨论】:
我正在尝试使用grep 来获取目录下的所有μs,不幸的是,μ 不是键盘字符,有什么想法吗?
顺便说一句,对于普通的键盘单词,我可以使用
find / -type f -print | xargs grep -inE <search_word> 2>/dev/null
找出所有包含搜索词的纯文本文件。
【问题讨论】:
您介意使用 sed 代替 grep 吗?
sed -n '/\xb5/p'
但是 grep 也应该可以工作:
grep -P '\xb5'
【讨论】:
在 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 才能使其正常工作。
【讨论】: