2

Winでcygwin grepを使用したgrep式があります。

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

ただし、絵文字クラスを特定したら、それらをデータから取り除きたいと思います。ただし、sed 内で上記の同じ正規表現を使用すると、構文エラーが発生します (はい、//g の代わりに /d を使用できることはわかっていますが、これは違いはありません。それでもエラーが発生します。)

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
        ^ ^ ^ ^ ^
          これらはエスケープする必要があります。

バックスラッシュがシェルによって解釈されないようにするには、二重引用符で囲まれた文字列の代わりに単一引用符で囲まれた文字列も使用する必要があります。

$ echo "\\,"
\,
$ エコー '\\,'
\\,

だからこれを試してください:

$ echo 'foo \m/ bar \,,/ baz' | sed 's/\(\\,,\/\|\\m\/\|\\m\/\\>\.<\/\\m\/\|:u\)*//g'
フーバーバズ
于 2010-05-24T19:15:13.553 に答える