2

我有一个在 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 如果我删除了整行的那部分,那么我不会收到任何错误(但是,当然,表情符号不会被过滤掉)。

提前致谢,

史蒂夫

4

1 回答 1

1

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

s/\(\\,,/\|\\m/\|\\m/\\>\.</\\m/\|:u\)*//g
        ^ ^ ^ ^ ^
          这些需要逃避。

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

$ 回声 "\\,"
\,
$ 回声 '\\,'
\\,

所以试试这个:

$ echo 'foo \m/ bar \,,/ baz' | sed 's/\(\\,,\/\|\\m\/\|\\m\/\\>\.<\/\\m\/\|:u\)*//g'
富吧巴兹
于 2010-05-24T19:15:13.553 回答