一対の括弧の間のすべてを削除するためにワンライナーをsedしますか?


15

私は、角括弧[]で囲まれたテキストで作業しているが、これは望ましくない。自分でブラケットを削除できるので、それを行うためにワンライナーは必要ありませんが、それらの間のすべてを削除するワンライナーが必要です。

括弧ではなく括弧()についてはどうですか?

回答:


20

[some text]空の文字列で置き換えます。ネストされた角かっこを解析したくsome textない場合、角かっこを含めることはできません。

sed -e 's/\[[^][]*\]//g'

ブラケット表現であること注[^][]何かを一致させるが、[または]]最初に来なければなりません。通常、a ]は文字セットを終了しますが、それがセットの最初の文字(ここでは、^補完文字の後)である場合、]それ自体を表します。

ネストされた角かっこを解析する場合、または角かっこで囲まれたテキストが複数行にわたる場合、sedは適切なツールではありません。


おかげで、@Gilles ...ところで、...それは複数行にまたがることができますが、私はラインに参加するPerlスクリプトを使用しています
ixtmixilix

@ixtmixilix:Perlスクリプトがある場合は、括弧で囲まれたテキストも削除することができます。Perlでは、書くことができますs/\[[^\[\]]*\]//g(つまり、バックスラッシュを使用して文字セットのメンバーをエスケープします)。
ジル 'SO-悪であるのをやめる'

@Gillesは[^] []の詳細を正確に説明できます。ありがとう
アラシュ

1
@arashams […]=文字セット。^最初の文字はセットを補完することを意味するため。]通常、セットの終わりを示しますが、それが以外の最初の文字である場合^、それは通常の文字です。空のセットまたは空のセットの補数は許可されません。その後[は普通で]、セットを終了します。
ジル 'SO-悪であるのをやめる'

@Gilles TNXあなたの助けが、それでも私はそれが平均線量何:(それを得るいけない「^セットを補完する最初の文字の手段として、」私は、それは例えばやっていることを意味し、それはすべての内容に一致しているに???
アラシュ

10

このコマンドsed -e 's/([^()]*)//g'は、括弧の代わりに括弧を使用します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.