Как изменить окончание файла для Windows или Mac в Linux? - PullRequest
3 голосов
/ 27 апреля 2011

Когда я сохраняю файл TSV в Windows из Excel, он использует окончание строки \ r или \ 015 (восьмеричное), которое отображается в vi как ^ M.

Когда я сохраняю файл TSV на Mac из Excel, он использует окончание строки \ r \ n или \ 015 \ 012 (восьмеричное), которое отображается в vi как ^ M.

Как мне справиться с изменением концов строк в обоих файлах, не добавляя лишних пустых строк, но при этом поддерживая совместимые с linux окончания концов?

В настоящее время я использую exec () в PHP для запуска следующего:

Если я использую:

cat {FILE} | tr -d "\015" > {NEW_FILE}

или

cat {FILE} | tr -d "\r" > {NEW_FILE}

Работает для файлов Windows, но файлы Mac не работают. (удаляет все окончания строк)

Если я использую:

cat {FILE} | tr "\015" "\012" > {NEW_FILE}

или

cat {FILE} | tr "\r" "\n" > {NEW_FILE}

Работает для файлов Mac, но файлы Windows не работают. (создает пустые строки)

Есть идеи, как справиться с одним и тем же?

Ответы [ 2 ]

1 голос
/ 27 апреля 2011

Мне кажется, я нашел элегантное решение этой проблемы. В своем PHP-скрипте я создал следующее:

$results = exec("cd $directory; grep -Pl $'\r\n' $filename");
if($results == $filename) {
    // Windows File (default)
    exec("cd $directory; cat $filename | tr -d '\015' > $tmpfile; mv $tmpfile $filename");      
} else {
    // MAC File
    exec("cd $directory; cat $filename | tr '\r' '\n' > $tmpfile; mv $tmpfile $filename");  
}

Я открыт для улучшений, если у кого-то есть.

0 голосов
/ 27 апреля 2011

dos2unix для файлов Windows и Mac2unix для файлов Mac.

...