我在awk脚本中有一个功能,主要是工作,但如果德国“umlaute”(äöü)通过则不会。
function sanitizeIdentifier(str){
debug( "san IN:" str)
gsub(/[^_a-zA-Z0-9]/, "_", str)
debug( "san OUT:" str)
return str
}
输出:
san IN:(Vorhalt für Start/Stopp)
san OUT:_Vorhalt_für_Start_Stopp__
我如何匹配变音符号或更好的为什么变音符号与表达式不匹配?
我的awk脚本是unicode(没有BOM的utf8),输入文件未知。 将它们转换为unicode也无济于事。
显式替换如gsub(/ä/, "ae", str)
仅在输入文件是unicode时才有效(这很明显)。
使用
gsub(/[^_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]/, "_", str)
替换出现但如果输入文件是Utf8,则它们被两个下划线替换。 整个行为似乎有点奇怪。
我在Windows上运行GNU Awk 3.1.6(来自gnuwin32)
答案 0 :(得分:2)
带有变音符号的字符超出了括号表达式中的范围,因此不匹配。 [:alpha:]
或[:alnum:]
等字符类应尊重语言环境设置,因此我建议使用它们:
gsub(/[^_[:alnum:]]/, "_", str)
使用LC_ALL=C
运行应该意味着替换了变音符号。您可能还想通过添加第二个替换来删除重复的_
:
gsub(/_+/, "_", str)