otherdata
otherdata
start_data
one
two
three
four
end_data
otherdata
otherdata
結果の出力は次のようになります。
one
two
three
four
sed
これは私にとって仕事のようです。
sed -n '/start_data/,/end_data/{1d;$d;p}' myfile
動作しません。最初の行は削除されますが、最後の行は削除されません。 (これまでは何の理由も論理的に説明できません)
さて、醜い方法を試してみましょう:
sed -n '/start_data/,/end_data/{/start_data\|end_data/!p}' myfile
公平に言えば、これはうまくいきます。しかし、私はより短い方法でも動作したいです。結果出力は次のとおりですいつも中間のデータのみが抽出されるため、最初の行と最後の行には両方のパターンが含まれます。
中かっこ内で and 文を結合しようsed
とすると、なぜ息が詰まるのでしょうか。1d
$d
ベストアンサー1
ロジックを逆に変更できます。
sed '1,/start_data/d;/end_data/,$d'
start_data
最初の行にないとします。この問題を解決するには、GNUがある場合はsed
代わりに次のようにします。
sed '0,/start_data/d;/end_data/Q'
それはGNUに固有のもの0
ですQ
。パターンスペースを印刷せずにQ
終了するsed
ので、最初の解決策のようにファイルの残りの部分を読み続けて削除しないので、より効率的です。