Bash
bash替換變數中的特殊字元
管道 (|) 有限的文本文件從 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
但沒有幫助。如果將來上傳的文件中有任何未知字元,我如何替換特殊字元不僅如此。
您可能有一個“bom”(字節順序標記,用於基於 unicode 語言環境的系統來指定係統的“小端”/“大端”
見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"