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