管道 (|) 限製文字檔案從 Windows 應用程式傳輸以進行處理。處理時,文件第一行第一列有一個特殊字元。這是從 Windows 傳輸之前文件在記事本中的外觀
Sector|Name|Manager|...
當我讀取時IFS='|' read -r -a fields < "/uploads/file_data.txt"
,第一列磁區被讀取為"Sector"
帶有特殊字元前綴。
當我這樣做時,head -1 "/uploads/file_data.txt" | od -c
列印的值是
0000000 357 273 277 S e c t o r |
我嘗試過tr -d < //uploads/file_data.txt > /uploads/file_data_temp.txt
但沒有幫助。如果將來上傳的文件中有任何未知字符,我該如何替換特殊字符?
答案1
您可能有一個“bom”(位元組順序標記,在基於 unicode 語言環境的系統上使用,用於指定係統的“little-endian”/“big-endian”性質
看https://en.wikipedia.org/wiki/Byte_order_mark
值得慶幸的是,這個似乎適用於 utf-8 語言環境,如果您只期望 ASCII 1-177 個字符,這是一件好事...
您可以透過插入一個被迫(暫時)使用 C 語言環境的 sed 來將其刪除,以便「看到」以下內容:
LC_ALL=C sed '1s/^\xEF\xBB\xBF//'
例如用作:
incoming program | LC_ALL=C sed '1s/^\xEF\xBB\xBF//' | somecmd
# or
< incomingfile LC_ALL=C sed '1s/^\xEF\xBB\xBF//' > outputfile
# <incomingfile : will give "incomingfile" content as stdin to sed
# then sed modifies only the first line, replacing the BOM with ""
# (the rest is not touched by sed and is transmitted as-is)
# > outputfile : directs sed output (ie, incomingfile without the BOM) to "outputfile"