使用KornShell从文件中提取正则表达式模式的多个实例

时间:2013-12-03 01:09:36

标签: regex shell scripting awk ksh

我有一个文件可能有多个字符串模式实例(以X结尾为Y开头)。我想提取匹配此模式的每个实例。这些可能在一行或新行可能或可能不在一行的开头或结尾。我尝试使用grep与正则表达式(X. * Y),但运行ksh的KornShell(ksh)版本无法识别-c选项,因此很难提取我需要的东西。我还读过awk可以做到这一点,但没有找到awk的好文档。

任何帮助都会很高兴。

1 个答案:

答案 0 :(得分:0)

如果模式包含在一行中,并且每行只包含一个实例,则可以尝试

awk -f ext.awk file

其中file是您的输入文件,ext.awk

BEGIN {
    pat="X.*Y"
}
$0 ~ pat {
    match ($0,"(" pat ")",a)
    print a[1]
}

更新

如果一行上可以找到多个模式,或者模式在多行上延伸,则可以将ext.awk替换为:

{
    line=line $0 RS
}
END {
    while(match(line,/(X[^Y]*Y)/,a)) {
        print a[1]
        line=substr(line,RSTART+RLENGTH)
    }
}
相关问题