在下面的 awk 代码部分中,file
包含一个带有完整 Linux 路径的文件名,其中可能包括backup-YYMMDD
YYMMDD 是日期的类型的目录。
我想将 YYMMDD 分配给isDate[file]
,即isDate[file]=YYMMDD
。
我怎样才能做到这一点?
for (file in files) {
if ( file ~ /(^|\/)(library|labs data|current)(\/|$)/ ) {
isKeep[file]
}
else if ( file ~ /(^|\/)(backup-[0-2][0-9][0-1][0-9][0-3][0-9])(\/|$)/ ) {
isDate[file]
}
else {
isDelete[file]
}
}
GNU
awk
有一个match
命令,它允许您提取以模式为特征的字符串组件的实际值。因此,您可以使用在
else if ....
你的程序的一部分。然后, (array) 变量pats
将填充(...)
您的 RegExp 中的所有 -enclosed 子表达式,这些子表达式在字符串中找到,从索引 1开始(pats[0]
将是整个表达式的实际值)。由于我们只有一个这样分组的子表达式(backup-YYMMDD
部分),因此pats[1]
包含您要查找的内容。或者,您可以直接尝试
请注意,这种方法当然依赖于只有一个
backup-YYMMDD
包含该模式的路径组件。编辑(在 OP 的注释中,@macxpat)
我使用字符串常量 (
"^[[:print:]] ... $"
) 来指定此答案中的正则表达式。但是,正如GNU Awk 用户指南中所述,将它们指定为正则表达式常量会更简洁、更有效。因此,更好地使用在上面的例子中!