使用awk正则表达式捕获插入符号(^)

时间:2011-11-07 19:10:25

标签: regex awk gawk

我输出的格式为:

/ignore-this/^/../I/want/this@ignore-this

我正在尝试使用awk正则表达式来捕获以下内容:

../I/want/this

这不会特别难,除非我无法弄清楚如何正确地逃避^所以它不会被解释为新行或不行。下面是我到目前为止,它几乎可以工作,除了它打印出来:

/ignore-this/^/../I/want/this

以下是代码:

#!/bin/awk -f                                                                              
{
    if (match($0, "\^.*@")){
        print substr($0, RSTART, RLENGTH-1);
    }
}

3 个答案:

答案 0 :(得分:2)

> echo '/ignore-this/^/../I/want/this@ignore-this' |\ 
awk -F"^" '{split($NF,a,"@");print a[1]}' 

输出:

/../I/want/this

这会将输入流分割为所有" ^"。然后它需要最后一个字段并将其拆分为" @"并打印字符串的前半部分。

编辑: 或者使用:

awk '/\^/{split($0,a,"[@^]");print a[2]}' file

HTH Chris

答案 1 :(得分:2)

另一种可能性,使用gawk:

#!/opt/local/bin/gawk -f
{
    if (match($0, /[\^]\/(.*)@/, pieces)) {
        print pieces[1];
    }
}

答案 2 :(得分:0)

awk -F'\\^|@' '{print $2}'

应该适用于这种情况

kent$  echo "/ignore-this/^/../I/want/this@ignore-this"\
        |awk -F'\\^|@' '{print $2}' 
/../I/want/this