0

有以下内容的文件(file.conf):

/etc/:
rc.conf
passwd
/usr/:
/usr/local/etc/:

我需要在“/etc/:”和第一个匹配行之间选择行,最后带有“:”。

cat ./file.conf | sed -n '/\/etc\/:/,/\/.*:$/p'

打印所有内容,但我需要

/etc/:
rc.conf
passwd
/usr/:

与此命令cat ./file.conf | sed -n '/\/etc\/:/,/\/.*:$/p; :q'相同。

4

2 回答 2

1

一个awk解决方案

awk '/^\/etc\// {f=1} f; /:$/ && !/\/etc\//{f=0}' file.conf
/etc/:
rc.conf
passwd
/usr/:

另一个版本

awk '/^\/etc\// {f=1;print;next} f; /:$/ {f=0}' file.conf

awk '
    /^\/etc\// {    # search for /etc/, if found do
        f=1         # set flag f=1
        print       # print this line (/etc/ line)
        next        # skip to next line so this would not be printed twice
        } 
    f;              # Is flag f set, yes do default action { print $0 }
    /:$/ {          # does line end with : 
        f=0         # yes, reset flag
        }
    ' file.conf
于 2013-10-23T11:48:06.283 回答
1

你可以试试这个sed

sed -n '/\/etc\/:/{:loop; $q; $!N; /:/b p; b loop; }; :p; p' file.conf

输出:

/etc/:
rc.conf
passwd
/usr/:
于 2013-10-23T12:11:41.217 回答