0

sed を使用して、角かっこで囲まれたテキストのすべてのインスタンスをドキュメントから削除しようとしているので、私のコードは次のとおりです。

sed -r 's|\[[^\]]*\]||g' file

ただし、これは角括弧で囲まれたテキストのすべてのインスタンスをピックアップしていないようです。特に、次の場合に失敗するようです。

[/a]
[/b]
[span style "blah" blah]

などですが、平文を囲む角括弧で機能します。私が知る限り、正規表現は ] ではない文字を囲む角かっこを探しているはずですが、何が間違っているのでしょうか?

4

1 に答える 1

1

この正規表現を試してみましたが、括弧内のテキストは削除されませんでした。

その2番目の「\」を削除すると、正規表現は

 sed -r 's|\[[^]]*\]||g'

すべての場合で完全に機能しました。

MacとLinuxの両方で試しました。Android は Linux を実行しているので、おそらくそこでも動作します。


説明の言葉: スキャンセットは、エスケープが関係する場合に特別です。']' 文字が scanset の最初の文字である場合、エスケープする必要はありません。scanset の最初のものではない場合、それを回避することはできません

于 2013-05-26T15:46:29.910 に答える