sedの予約済みスペースを使用する必要がありますか?

sedの予約済みスペースを使用する必要がありますか?

ローカルxinitrcの最後のセグメントを除いてシステムxinitrcを取得したいので、次のようにします。

    % sed -n 'H
            /^exec ./{
                    x
                    s/\([^\n]\+\n\)\+exec.*//
                    p
            }' /etc/X11/xinit/xinitrc

つまり、^exec遭遇すると、exec行とその段落の上の部分を除くすべてを印刷します。

私の質問は:これをもっと簡単にすることはできますか?たとえば、予約済みのスペースを使用せずにできますか? Nを試してみましたが、期待どおりに動作しませんでした。

答え1

sed「およびその段落の前述の部分」は基本的に「はい」を意味します。次の行の内容に基づいて1行を印刷するかどうかを決定するには、ほとんどバッファを使用する必要があります。〜しない限りパラダイムを再構成できます。

「段落」の定義は何ですか?一貫性がありますか?かなり任意のレコード区切り記号を定義できますperlawk次のように試すことができます。

$: awk 'BEGIN{ RS="if " }
        /exec/{ exit; }
        { print }
       ' /etc/X11/xinit/xinitrc

ただし、より良い区切り文字を取得するには、データを調査することをお勧めします。

関連情報