我在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>
提前致谢,
史蒂夫
答案 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