2

bashスクリプトでは、どのようなユーティリティがあり、2つの文字列の間のテキスト(刺し傷を含む)を削除するにはどうすればよいですか。

元のテキスト:

(ABC blah1)blah 2(def blah 5)blah 7)(DEF blah 8)blah 9

'(def'と次の')'の間のすべてのテキストを削除したいと思います。したがって、私の望ましい出力は次のようになります。

(ABC blah1)blah 2blah 7)blah 9

検索では大文字と小文字を区別しないことが望ましいでしょう...上記の例では、「(def ...)」と「(DEF ...)」を検出して削除します。

私が試してみました:

echo "(ABC blah1)blah 2(def blah 5)blah 7)(DEF blah 8)blah 9" | sed 's/(def.*)//gI'

しかし、出力は次のとおりです。

(ABC blah1)blah 2blah 9

これは、'。*'がsedで貪欲だからだと思います。

sed検索文字列をフォーマットする方法はありますか?sedはこれに最適なユーティリティですらありますか?私はこれをbashスクリプトから実行しているので、bashを介して利用できる基本的なutilは何でも実行できます。

4

1 に答える 1

7

確かに、sedは貪欲です。しかし、あなたはできる:

sed 's/(def[^)]*)//gi'

すべてのsedがフラグを受け入れるわけではないiため、次のことを行う必要がある場合があることに注意してください。

sed 's/([dD][eE][fF][^)]*)//g'
于 2012-11-24T13:01:56.153 に答える