我必须使用 sed 的保留空间吗?

我必须使用 sed 的保留空间吗?

我想获取系统 xinitrc 除了本地 xinitrc 中的最后一段之外,所以我使用

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

也就是说,当^exec遇到 时,我会打印除 exec 行及其段落的上述部分之外的所有内容。

我的问题是:这可以做得更简单吗?例如,是否可以在不使用保留空间的情况下完成?我尝试使用 N,但无法使其按预期工作。

答案1

在 中sed,“及其段落的上述部分”基本上意味着是。如果你想根据后面几行的内容决定是否打印行,你几乎必须使用缓冲区,除非你可以重构你的范式。

“段落”的定义是什么?是否一致?perlawk允许您定义相当任意的记录分隔符。你可以尝试这样的事情:

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

不过,我建议研究您的数据以获得更好的分隔符。

相关内容