使用sed过滤掉表情符号

时间:2010-05-24 18:50:44

标签: regex sed grep emoticons

我在Win上使用了cygwin grep的grep表达式。

grep -a "\\,,/\|\\m/\|\\m/\\>\.</\\m/\|:u" all_fbs.txt > rockon_fbs.txt

然而,一旦我识别出表情符号类,我想将它们从数据中删除。但是,sed中的相同正则表达式导致语法错误(是的,我意识到我可以使用/ d而不是// g,但这没有什么区别,我仍然得到错误。)

sed "s/\(\\,,/\|\\m/\|\\m/\\>\.</\\m/\|:u\)*//g"

完整的一行是:

grep -a "\\,,/\|\\m/\|\\m/\\>\.</\\m/\|:u" all_fbs.txt | sed "s/\(\\,,/\|\\m/\|\\m/\\>\.</\\m/\|:u\)*//g" | sed "s/^/ROCKON\t/" > rockon_fbs.txt

结果是:

sed: -e expression #1, char 14: unknown option to `s'

我知道它来自sed正则表达式我正在询问它b / c如果我删除整行的那一部分,那么我没有得到任何错误(当然,表情符号没有过滤掉)。 / p>

提前致谢,

史蒂夫

1 个答案:

答案 0 :(得分:1)

您需要转义/否则会过早终止表达式。

s/\(\\,,/\|\\m/\|\\m/\\>\.</\\m/\|:u\)*//g
        ^     ^     ^      ^   ^
          These need escaping.

您还应该使用单引号字符串而不是双引号字符串来防止shell解释反斜杠:

$ echo "\\,"
\,
$ echo '\\,'
\\,

所以试试这个:

$ echo 'foo \m/ bar \,,/ baz' | sed 's/\(\\,,\/\|\\m\/\|\\m\/\\>\.<\/\\m\/\|:u\)*//g'
foo  bar  baz