AWK中switch case无法匹配*.html文件名的正确写法咨询
问题解决:awk中用switch匹配带路径的HTML文件名
你的核心问题在于不了解awk switch语句的匹配规则:
- 默认情况下,
switch的case是精确字符串匹配,不是shell通配符或正则匹配 - 你尝试的
*.html、/*html/写法都不符合awk语法规范
正确写法(GNU awk 支持)
直接用正则匹配outfile是否以.html结尾,在case中使用~ /正则/的格式:
switch( outfile ){ case ~/\.html$/ : doctype="application/xhtml+xml" ; break; default : ; }
说明:
\.:转义正则中的.,避免匹配任意字符$:锚定字符串结尾,确保匹配的是文件名后缀而非中间包含html的字符串
为什么之前的写法失败
case *.html:只会匹配字面量字符串*.html,不会匹配实际的文件名(比如Text/content_001_One.html)case /*.html/:awk不支持这种直接写正则的case格式,必须结合~操作符声明正则匹配
兼容POSIX awk的写法(如果不能用GNU扩展)
如果你的环境只能用标准POSIX awk(不支持switch的正则case),可以先通过正则判断再赋值,效果和switch一致:
if (outfile ~ /\.html$/) { doctype="application/xhtml+xml" }
内容的提问来源于stack exchange,提问作者Eric Marceau
相关产品推荐
相关产品推荐

