同时更改文件的行尾和编码

同时更改文件的行尾和编码

我有一些带有 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

我会对您的脚本进行一些细微的修改。首先,不要lsfor循环中使用,而要使用,*.csv因为 glob 将处理文件名中的不可打印字符和空格。不要使用 sed 的就地重定向到$file.bak。如果strings您的系统上有 ,则将其替换sedstrings。并始终记住引用变量。

    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 

相关内容