ファイル内の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のパターンスペースを操作するよりも読みやすくなります。