.txt ファイルの文をフィルタリングするには、コマンドが必要です。

.txt ファイルの文をフィルタリングするには、コマンドが必要です。

次の内容を含むファイルがあります。

select *
 from 
emp;


select *
 from
 dept;

selection
end;

私は次のような出力を得たいと思います。

select *
 from 
emp;


select *
 from
 dept;

使ってみよう

awk '/SELECT/{a=1} a; /;/{a=0}' XXARXADLMT.txt 

しかし、それはうまくいきませんでした。

答え1

ファイルが挿入されたファイルより長い場合でも機能します。

while read line; do
  if [[ "$line" == "select *" ]]; then
    echo "$line"
    read line
    echo "$line"
    read line
    echo "$line"
  fi
done < XXARXADLMT.txt

または、重複項目を次のように置き換えることもできますread line; echo $line;

for i in {1..2}; do read line; echo $line; done

答え2

私が正しく理解した場合、スクリプトには2つの問題があります。

  • 大文字と小文字を区別します。
  • 長い単語の一部を一致させます。

また、変数を設定する代わりにコンマ演算子を使用できます。

結論として、次の事項が要件を満たしている必要があります。

awk -v IGNORECASE=1 '/select /,/;/' XXARXADLMT.txt

答え3

perl -00 -n -e 'print if (m/select /i)' XXARXADLMT.txt 

これは、段落読み取りモード(オプション)を使用して、大文字と小文字をperl区別しない正規表現(末尾のスペースを含む)-00と一致する段落のみを印刷します。select

「段落」は、1つ以上の空白行で区切られたテキストブロックです。

出力:

select *
 from 
emp;

select *
 from
 dept;

(出力の最後に別の空行がありますが、HTMLのあいまいさとこのサイトのコード形式のため、ここには表示されません。)

関連情報