我正在嘗試編寫一個腳本,它將自動從文件中刪除UTF-8 BOM。我無法檢測文件是否具有第一位。這裏是我的代碼:如何檢測文件是否在Bash中有UTF-8 BOM?
function has-bom {
# Test if the file starts with 0xEF, 0xBB, and 0xBF
head -c 3 "$1" | grep -P '\xef\xbb\xbf'
return $?
}
出於某種原因,head
似乎被忽略了BOM在文件的前面。作爲一個例子,運行這個
printf '\xef\xbb\xbf' > file
head -c 3 file
將不會打印任何東西。
我試過在head --help
尋找一個選項,可以讓我解決這個問題,但沒有運氣。我能做些什麼來完成這項工作?
呵呵,從來不知道Bash支持十六進制字符串文字。無論如何,謝謝你的偉大答案! –
您好,請問我行'head -c 3 file | hexdump -c','-c'做什麼?前一個似乎是1)限制字符輸出的數量2)限制行號(可能)爲0000000和0000003;但是後者會將輸出結果視爲「be bf」等等,置換爲替換標記。我使用bash和Windows下生成的文本文件進行測試,原始編碼= GB18030。謝謝。 – CrazyFrog
@CrazyFrog'head -c 3 file'將'file'的前三個字符寫入標準輸出。 'hexdump -C'將這些字符以人性化的方式格式化爲十六進制。 – John1024