linux – 如何检测文件在Bash中是否具有UTF-8 BOM?
发布时间:2020-12-13 17:20:01 所属栏目:Linux 来源:网络整理
导读:我正在尝试编写一个脚本,将自动从文件中删除UTF-8 BOM.我无法检测文件是否有第一个.这是我的代码: function has-bom { # Test if the file starts with 0xEF,0xBB,and 0xBF head -c 3 "$1" | grep -P 'xefxbbxbf' return $?} 由于某种原因,头似乎忽略了
我正在尝试编写一个脚本,将自动从文件中删除UTF-8 BOM.我无法检测文件是否有第一个.这是我的代码:
function has-bom { # Test if the file starts with 0xEF,0xBB,and 0xBF head -c 3 "$1" | grep -P 'xefxbbxbf' return $? } 由于某种原因,头似乎忽略了文件前面的BOM.举个例子,运行这个 printf 'xefxbbxbf' > file head -c 3 file 不会打印任何东西. 我试着寻找一个可以帮助我解决这个问题的选项,但没有运气.有什么可以做的,使这项工作吗? 解决方法
首先,我们来证明头部实际工作正常:
$printf 'xefxbbxbf' >file $head -c 3 file $head -c 3 file | hexdump -C 00000000 ef bb bf |...| 00000003 现在,我们来创建一个工作函数has_bom.如果你的grep支持-P,那么一个选项是: $has_bom() { head -c3 "$1" | LC_ALL=C grep -qP 'xefxbbxbf'; } $has_bom file && echo yes yes 目前,只有GNU grep支持-P. 另一个选择是使用bash的$’…’: $has_bom() { head -c3 "$1" | grep -q $'xefxbbxbf'; } $has_bom file && echo yes yes ksh和zsh也支持$’…’,但是这个结构不是POSIX,破折号不支持它. 笔记: >使用明确的return $?是可选的.默认情况下,该函数将返回与最后一个命令运行的退出代码. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |