我输出的格式为:
/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);
}
}
答案 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