0

なぜこれが機能しないのか、私はちょっと混乱しています。もう少し複雑なことをしようとしていますが、私の問題の核心は、単一行のCコメントの一致にあります。

myfile

/* a comment */

ランニング:

sed 's|/\*\([.]*\)\*/|\1|' ./myfile

一致/置換しません。

何故ですか?私はそれをパーツに分割しました、そしてそれは個々の部分(オープニング/*、スタッフ、クロージング*/、そして組み合わせ(開始/中間と中間/終了))で機能するようです、そしてそれはすべて機能します、しかしそれをまとめることはそうではありません。

私は何が欠けていますか?

4

1 に答える 1

2

[.]*、0個以上のドットの文字列を探しています。.をメタ文字にする必要があります。その周りの角かっこを削除します。

sed 's|/\*\(.*\)\*/|\1|' ./myfile

これは欲張りマッチングアルゴリズムであることに注意してください。これが、通常の(POSIX)バージョンのsedサポートのすべてです。だということだ:

XX /* comment1 */ YY /* comment2 */ ZZ

出力します:

XX  comment1 */ YY /* comment2  ZZ

クラシックでそれを修正sedすることは、試みる価値がないほど不可能に近いです。でPCRE(Perl互換の正規表現)をサポートしてsedいる場合は、欲張りでないマッチング演算子を使用して、それを2つのコメントとして扱うことができます。

于 2012-08-28T02:59:13.483 に答える