awk相同的开始和结束模式

时间:2013-10-13 12:45:50

标签: regex bash awk

我有一个如下图所示的模式。我正在尝试提取多行记录(从Dr Group Name到第一个空白行)。我试过了:

awk 'BEGIN{RS="\n" } /DR Group Name: \\Data Replication\\mc_wtec_1/,/\n/'

但它给了我所有四个记录。

Storage WWN: 50001FE15007DBA0
    DR Group Name: \Data Replication\mc_wtec_1
        WWID list:
                   600508B4001078FD0002400001800000

    DR Group Name: \Data Replication\vanilla_dr
        WWID list:
                   600508B4001078F10002400002D20000


Storage WWN: 50001FE15007DBD0
    DR Group Name: \Data Replication\mc_wtec_1
        WWID list:
                   600508B4001078FD0002400001800000

    DR Group Name: \Data Replication\vanilla_dr
        WWID list:
                   600508B4001078F10002400002D20000

4 个答案:

答案 0 :(得分:2)

RS="\n"部分是奇怪的;是不是默认记录分隔符?删除它对匹配的输出没有影响,我不指望它。

结束模式也是假的。您正在搜索包含换行符的行,但awk会从输入行中删除换行符,因此它与任何内容都不匹配,因此模式范围从第一行DR Group Name行延伸到结束行文件。

你想寻找一条空行;那是/^$/。因此:

$ awk '/DR Group Name: \\Data Replication\\mc_wtec_1/,/^$/' data
    DR Group Name: \Data Replication\mc_wtec_1
        WWID list:
                   600508B4001078FD0002400001800000

    DR Group Name: \Data Replication\mc_wtec_1
        WWID list:
                   600508B4001078FD0002400001800000
$

答案 1 :(得分:0)

awk '/wtec_1/ {ok=1} /^$/ {ok=0} {if(ok){print $0}}' filename

你似乎问过什么。基于样本。

答案 2 :(得分:0)

看起来您只需要删除“存储WWN”行,然后您将获得每条记录:

< input sed '/^Storage WWN/d' | awk '{ print "Record: ", $0 }' RS=

例如,要获得第三条记录:

< input sed '/^Storage WWN/d' | awk NR==3 RS=

要获取mc_wtec_1,请尝试:

< input sed '/^Storage WWN/d' | awk '/mc_wtec_1/' RS=

(在上述所有情况中,假设您的输入数据位于名为“input”的文件中。该文件可以指定为sed的参数,而不是由shell重定向,并进行重定向在'sed'之前没有必要。)

答案 3 :(得分:0)

搜索花样并在其后打印两行:

awk '/ DR Group Name: \Data Replication\mc_wtec_1/{print;for(i=1;i<=3;i++){getline;print}}' filename

或更好的方式

在脚本中添加正则表达式搜索模式

awk '/ DR Group Name: \\Data Replication\\mc_wtec_1/,/([A-Z]+[0-9]+)/' filename

([A-Z]+[0-9]+)会查找600508B4001078FD0002400001800000模式

<强>输出:

DR Group Name: \Data Replication\mc_wtec_1
    WWID list:
               600508B4001078FD0002400001800000

DR Group Name: \Data Replication\mc_wtec_1
    WWID list:
               600508B4001078FD000240000180000000