Unixで2つの括弧の間の文字列を削除する方法

Unixで2つの括弧の間の文字列を削除する方法

ファイル内の2つの括弧の間にある文字列または数字を削除する必要があるなどの要件があります。sedコマンドを使用しましたが、1行で実行されます。開くかっこは1行にあり、閉じ括弧は別の行にあります。どうすればいいですか?

次のコマンドを試してみましたsed

sed -e 's/([^()]*)//g'

ただし、これは開かっこと閉じ括弧が同じ行にある場合にのみ機能します。

たとえば:-

入力ファイル:

select a
,b
,c
FROM ABCD
(select e
,f
,g
,h FROM XYZ)

出力は次のようになります。

select a
,b
,c
FROM ABCD

ベストアンサー1

次の単純なPerlスクリプトを使用して、複数行にまたがるすべての角かっこペアとその内容を削除します。

#!/usr/bin/perl
undef $/;
$text = <>;
#Flags: g=match repeatedly; s=dot matches newline
$text =~ s/\(.*?\)//gs;
print $text;

これをコマンドラインに入れるには、次の1行バージョンを使用してください。

perl -p0777e 's/\(.*?\)//gs' [filename]

Perlソリューションよりも短くて簡単であることに注意してください。-0777行区切り記号(-0以下のフラグを参照man perlrun)を無効にして、ファイル全体が1つの手順で処理されるようにします。良い古いPerl...また(通常Perlの場合:-))sedのパターンスペースを操作するよりも読みやすくなります。

おすすめ記事