我有一个文件,它可能有多个字符串模式实例(以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)
}
}