use*_*389 5 regex scripting awk encoding utf-8
我有一个使用错误字符编码编辑的文本文件,因此当我使用 UTF-8 打开它时,某些字符串中有一些 mojibake 和损坏的字符。哪种脚本语言在检测这些损坏字符时最有效?Perl 不是一个选项。我基本上是想找到一种方法来使用脚本扫描文本文件并输出行号,并可能在发现损坏字符的地方进行偏移。我该怎么做?我正在考虑使用 AWk,但我不知道在搜索损坏的字符时使用什么正则表达式。如果我能指出正确的方向,那就太好了。
更全面的输入:
我希望脚本告诉我包含损坏字符的行号,这将是上例中的第五行。此外,文本文件中有不同的语言。我有英语中文、法语、西班牙语、俄语、葡萄牙语、土耳其语、French_Euro、德语、荷兰语、佛兰德语、韩语、葡萄牙语_Moz。我还有一些特殊字符,比如 # 和 ! 和 ***
我用这个 if 语句来得到上面的输出:
if($1 ~ /[^\x00-\x7F]/){
print NR ":" , $0 > "output.txt";
count++;
}
这将查找 ASCII 范围之外的所有字符:
\n\n$ awk \'/[^\\x00-\\x7F]/{ print NR ":", $0 }\' file\n1: Interruptor EC n\xc3\x83\xc2\xa3o est\xc3\x83\xc2\xa1 em DESLOCAR\n4: \xc3\xa8\xc2\xbe\xe2\x80\xa6\xc3\xa5\xc5\xa0\xc2\xa9\xc3\xa9\xc2\xa9\xc2\xbe\xc3\xa9\xc2\xa9\xc2\xb6\xc3\xa5\xc2\xae\xc2\xa4\xc3\xa9\xe2\x80\x94\xc2\xa8\xc3\xa5\xe2\x80\xa6\xc2\xb3\xc3\xa9\xe2\x80\x94\xc2\xad\n5: Porte cab. aux. ferm\xc3\x83\xc2\xa9e\n7: \xc3\x90\xe2\x80\x9d\xc3\x90\xc2\xb2\xc3\x90\xc2\xb5\xc3\x91\xe2\x82\xac\xc3\x91\xc5\x92 \xc3\x90\xc2\xb0\xc3\x90\xc2\xbf\xc3\x90\xc2\xbf\xc3\x90\xc2\xb0\xc3\x91\xe2\x82\xac\xc3\x90\xc2\xb0\xc3\x91\xe2\x80\x9a\xc3\x90\xc2\xbd\xc3\x90\xc2\xbe\xc3\x90\xc2\xb9 \xc3\x90\xc2\xba\xc3\x90\xc2\xb0\xc3\x90\xc2\xbc\xc3\x90\xc2\xb5\xc3\x91\xe2\x82\xac\xc3\x91\xe2\x80\xb9 \xc3\x90\xc2\xb7\xc3\x90\xc2\xb0\xc3\x90\xc2\xba\xc3\x91\xe2\x82\xac\xc3\x91\xe2\x80\xb9\xc3\x91\xe2\x80\x9a\xc3\x90\xc2\xb0\n13: \xc3\xa9\xc2\xab\xcb\x9c\xc3\xa5\xc5\xbd\xe2\x80\xb9\xc3\xa4\xc2\xbf\xc3\xa6\xc5\xa0\xc2\xa4\xc3\xa6\xe2\x80\xb0\xe2\x80\xb9\xc3\xa6\xc5\xb8\xe2\x80\x9e\xc3\xa5\xe2\x80\x98\xc3\xa4\xc2\xb8\xe2\x80\xb9\n14: Barri\xc3\x83\xc2\xa8re descendue\n16: \xc3\x90\xc5\xbe\xc3\x90\xc2\xb3\xc3\x91\xe2\x82\xac\xc3\x90\xc2\xb0\xc3\x90\xc2\xbd\xc3\x90\xc2\xb8\xc3\x91\xe2\x80\xa1. \xc3\x90\xc5\xb8\xc3\x90\xc2\xbb\xc3\x90\xc2\xb0\xc3\x90\xc2\xbd\xc3\x90\xc2\xba\xc3\x90\xc2\xb0 \xc3\x90\xe2\x80\x99\xc3\x90\xe2\x80\x99\xc3\x90\xc5\xa1 \xc3\x90\xc2\xbe\xc3\x90\xc2\xbf\xc3\x91\xc6\x92\xc3\x91\xe2\x80\xb0.\n19: Barra de separa\xc3\x83\xc2\xa7\xc3\x83\xc2\xa3o descida\n22: DP\xc3\xa6\xc5\x93\xc2\xaa\xc3\xa5\xc2\xaf\xc3\xa5\xc5\xa0\xc2\xa8\n23: Puiss. r\xc3\x83\xc2\xa9p. non activ\xc3\x83\xc2\xa9e\n25: !!! \xc3\x90\xe2\x80\x99\xc3\x90\xc2\xbd\xc3\x90\xc2\xb5\xc3\x91\xcb\x86\xc3\x90\xc2\xbd\xc3\x91\xc3\x91 \xc3\x90\xc2\xbc\xc3\x90\xc2\xbe\xc3\x91\xe2\x80\xb0\xc3\x90\xc2\xbd\xc3\x90\xc2\xbe\xc3\x91\xc3\x91\xe2\x80\x9a\xc3\x91\xc5\x92 \xc3\x90\xc2\xbd\xc3\x90\xc2\xb5 \xc3\x90\xc2\xb2\xc3\x90\xc2\xba\xc3\x90\xc2\xbb\xc3\x91\xc5\xbd\xc3\x91\xe2\x80\xa1\xc3\x90\xc2\xb5\xc3\x90\xc2\xbd\xc3\x90\xc2\xb0\n26: Pot\xc3\x83\xc2\xaancia Dist N\xc3\x83\xc2\xa3o Ativada\n28: Pot\xc3\x83\xc2\xaancia dist n\xc3\x83\xc2\xa3o activada\n31: \xc3\xa6\xc5\x93\xc2\xba\xc3\xa8\xc2\xbd\xc2\xa6\xc3\xa6\xc5\x93\xc2\xaa\xc3\xa7\xc2\xa7\xc2\xbb\xc3\xa5\xc5\xa0\xc2\xa8\n33: Motor no se est\xc3\x83\xc2\xa1 moviendo\n34: \xc3\x90\xe2\x80\xba\xc3\x90\xc2\xbe\xc3\x90\xc2\xba\xc3\x90\xc2\xbe\xc3\x90\xc2\xbc\xc3\x90\xc2\xbe\xc3\x91\xe2\x80\x9a\xc3\x90\xc2\xb8\xc3\x90\xc2\xb2 \xc3\x90\xc2\xbd\xc3\x90\xc2\xb5\xc3\x90\xc2\xbf\xc3\x90\xc2\xbe\xc3\x90\xc2\xb4\xc3\x90\xc2\xb2\xc3\x90\xc2\xb8\xc3\x90\xc2\xb6\xc3\x90\xc2\xb5\xc3\x90\xc2\xbd\n35: Auto N\xc3\x83\xc2\xa3o se Movendo\n37: A n\xc3\x83\xc2\xa3o se move\n40: \xc3\xa6\xc5\x93\xc2\xba\xc3\xa8\xc2\xbd\xc2\xa6\xc3\xa7\xc5\xa0\xc2\xb6\xc3\xa5\xe2\x80\xa0\xc2\xb5\xc3\xa5\xe2\x80\xa6\xc3\xa8\xc2\xae\xc2\xb8\xc3\xa8\xe2\x80\xa1\xc2\xaa\xc3\xa5\xc5\xa0\xc2\xa8\xc3\xa5\xc5\x93\xc3\xa6\xc5\x93\xc2\xba\n41: Conditions auto\\npermettent arr\xc3\x83\xc2\xaat auto\n43: \xc3\x90\xc2\xa3\xc3\x91\xc3\x91\xe2\x80\x9a\xc3\x90\xc2\xb0\xc3\x90\xc2\xbd\xc3\x90\xc2\xbe\xc3\x90\xc2\xb2\xc3\x90\xc2\xba\xc3\x90\xc2\xb8 \xc3\x90\xc2\xbb\xc3\x90\xc2\xbe\xc3\x90\xc2\xba\xc3\x90\xc2\xbe\xc3\x90\xc2\xbc\xc3\x90\xc2\xbe\xc3\x91\xe2\x80\x9a\xc3\x90\xc2\xb8\xc3\x90\xc2\xb2\xc3\x90\xc2\xb0\\n\xc3\x90\xc5\xb8\xc3\x91\xe2\x82\xac\xc3\x90\xc2\xb5\xc3\x90\xc2\xb4\xc3\x91\xc6\x92\xc3\x91\xc3\x90\xc2\xbc\xc3\x90\xc2\xb0\xc3\x91\xe2\x80\x9a\xc3\x91\xe2\x82\xac\xc3\x90\xc2\xb8\xc3\x90\xc2\xb2\xc3\x90\xc2\xb0\xc3\x91\xc5\xbd\xc3\x91\xe2\x80\x9a \xc3\x90     \xc2\xb0\xc3\x90\xc2\xb2\xc3\x91\xe2\x80\x9a\xc3\x90\xc2\xbe\xc3\x90\xc2\xbc\xc3\x90\xc2\xb0\xc3\x91\xe2\x80\x9a\xc3\x90\xc2\xb8\xc3\x91\xe2\x80\xa1\xc3\x90\xc2\xb5\xc3\x91\xc3\x90\xc2\xba\xc3\x91\xc6\x92\xc3\x91\xc5\xbd \xc3\x90\xc2\xbe\xc3\x91\xc3\x91\xe2\x80\x9a\xc3\x90\xc2\xb0\xc3\x90\xc2\xbd\xc3\x90\xc2\xbe\xc3\x90\xc2\xb2\xc3\x90\xc2\xba\xc3\x91\xc6\x92\n44: Condi\xc3\x83\xc2\xa7\xc3\x83\xc2\xb5es da moto\\nPermitem Auto Parada\n这样就够了吗?如果没有,请编辑您的问题以显示更全面的示例输入,包括上述方法不起作用的情况。
\n