У меня есть несколько файлов с окончаниями строк Windows и латинской кодировкой 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 ответ1

0

Я бы сделал несколько небольших изменений в вашем сценарии. Во-первых, не используйте ls в цикле for , используйте *.csv потому что глоб будет обрабатывать непечатаемые символы и пробелы в именах файлов. Вместо того, чтобы использовать перенаправление 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 

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .