大きなテキストファイルがあり、そのファイルの一部の行だけを見たいです。最初の行が正規表現と一致することを望み、そのR
行が正規表現に一致する場合、そのS
行または後続の行については気にしません。中央の行は一致しませんR
。後で出力をどこかにパイプできるように、bashコマンドを使用してコマンドラインでこれを行う方法はありますか?
答え1
そしてsed
:
sed -n '/R/,$!d; /S/q; p'
例:
$ seq 20 | sed -n '/6/,$!d; /1/q; p'
6
7
8
9
答え2
パールの使用:
# perl -ne 'print if ( /R/ .. /S/ ); last if /S/'
S-Matching正規表現を印刷しますが、
答え3
awkを使う
awk 'x&&/S/{exit};x+=/R/' file
はい
seq 20 | awk 'x&&/1/{exit};x+=/6/'
6
7
8
9
答え4
この問題を解決するためにプログラムを作成しました。から
次のように使用できます。
cat file | fromto -f R -T S
R
インポートする正規表現はどこにありますか?~から、S
キャプチャする正規表現です。到着。その間のすべての行を印刷します。-f
「「from」行を含む」を意味し、-F
「「from」行を含まない」を意味します。と同じ-t
/ -T
。問題は「to」行を除いて、-T
その要件の引数を除外することです。これを使用すると、-t
「to」行が印刷されます(ただし、次の行は印刷されません)。