我有一些带有 Windows 行尾和 latin-1 编码的文件,我需要将其转换为 unix 行尾和 utf-8。
当然,我可以
for file in ./*.csv; do
sed s'/^M//' "$file" > "${file}.bak"
iconv -f iso-8859-1 -t utf8 "${file}.bak" > "$file"
rm "${file}.bak"
done
但是有没有一种常用的工具可以同时完成这两件事?也许这不是最有效的方法。(也许是 iconv?)
答案1
我会对您的脚本进行一些细微的修改。首先,不要ls
在for
循环中使用,而要使用,*.csv
因为 glob 将处理文件名中的不可打印字符和空格。不要使用 sed 的就地重定向到$file.bak
。如果strings
您的系统上有 ,则将其替换sed
为strings
。并始终记住引用变量。
for file in *.csv
do sed 's/^M//' "$file" > "${file}.bak"
#strings "$file" > "${file}.bak"
iconv -f -iso-8859-1 -t utf8 "${file}.bak" > "$file"
rm "${file}.bak"
done