次のファイルがありますawk
。問題は、一致する行$0 ~ end_ere
が印刷される場合です。しかし、私が望むのは、以前の一致がある場合にのみその行を印刷することです$0 ~ beg_ere
。どうですか?
beg_ere
セクションの先頭に一致し、
end_ere
セクションの最後に一致します。
pn_ere
行の先頭からコメント文字を削除します。
trueの場合、
showpr
一致する行が印刷されます。それ以外の場合は、ハッチ内の線だけが印刷されます(合計に一致する線は印刷されないことを意味します)。beg_ere
end_ere
beg_ere
end_ere
$0 ~ beg_ere {
display = 1
if ( ! showpr ) { next }
}
$0 ~ end_ere {
if (( display == 1 )); then
if ( ! showpr ) { print "" }
else { sub(pn_ere, "") ; print ; print "" }
fi
display = 0
}
display { sub(pn_ere, "") ; print }
答え1
あなたの説明によると、あなたが望む仕事は次のとおりです。
$0 ~ beg_ere {
inBlock = 1
}
inBlock {
lines[++numLines] = $0
if ( $0 ~ end_ere ) {
delta = ( showpwr ? 0 : 1 )
for ( lineNr=(1+delta); lineNr<=(numLines-delta); lineNr++ ) {
sub(pn_ere, "", lines[lineNr])
print lines[lineNr]
}
inBlock = numLines = 0
}
}
ただし、質問にサンプル入力/出力を提供しておらず、質問のコードを実行できる最小限の完全なスクリプトではないため、明らかにテストすることはできません。