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



我有一个文件,它可能有多个字符串模式实例(以X开头,以Y结尾)。我想提取与此模式匹配的每个实例。它们可能在单行上,也可能不在行的开头或末尾。我曾尝试使用regex模式为(X.*Y)的grep,但运行ksh的KornShell(ksh)版本无法识别-c选项,因此很难提取我需要的内容。我也读到awk可以做到这一点,但没有为awk找到好的文档。

如有任何帮助,我们将不胜感激。

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

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)
    }
}

最新更新