ローカルxinitrcの最後のセグメントを除いてシステムxinitrcを取得したいので、次のようにします。
% sed -n 'H
/^exec ./{
x
s/\([^\n]\+\n\)\+exec.*//
p
}' /etc/X11/xinit/xinitrc
つまり、^exec
遭遇すると、exec行とその段落の上の部分を除くすべてを印刷します。
私の質問は:これをもっと簡単にすることはできますか?たとえば、予約済みのスペースを使用せずにできますか? Nを試してみましたが、期待どおりに動作しませんでした。
答え1
のsed
「およびその段落の前述の部分」は基本的に「はい」を意味します。次の行の内容に基づいて1行を印刷するかどうかを決定するには、ほとんどバッファを使用する必要があります。〜しない限りパラダイムを再構成できます。
「段落」の定義は何ですか?一貫性がありますか?かなり任意のレコード区切り記号を定義できますperl
。awk
次のように試すことができます。
$: awk 'BEGIN{ RS="if " }
/exec/{ exit; }
{ print }
' /etc/X11/xinit/xinitrc
ただし、より良い区切り文字を取得するには、データを調査することをお勧めします。