2016-11-22 3 views
0

Я перенес миллионы сгенерированных SVG-файлов из DOS в ящик Linux и понял, что в качестве последнего символа каждого файла есть символ^@ (конец символа DOS файла), который дает ошибку при попытке отобразить SVG-файл в браузере.удалить DOS конец файла из многих файлов в Linux

В этом вопросе: How can I remove the last character of the last line of a file?

Марун дает решение, как:

sed '$ s/.$//' your_file 

Но когда я изменить его, чтобы выглядеть следующим образом:

sed '$ s/.$//' *.SVG 

или

find . -print | grep .SVG | sed '$ s/.$//' 

Не работает.

Я также хотел бы иметь возможность указать, что он должен удалить только последний символ, если это^@.

Может кто-нибудь, пожалуйста, скажите мне, что я делаю неправильно или как заставить это работать. SVG-файлы находятся в тысячах подкаталогов, поэтому мне нужно иметь возможность внести изменения сверху вниз древовидной структуры.

+0

См: [? Как я могу запустить dos2unix на целой директории] (http://stackoverflow.com/q/11929461/3776858) – Cyrus

ответ

1

Я предполагаю, что ваш первый пример не работает, потому что он принимает только последний файл, расширенный *.SVG. Второй пример (тот, который с командой find) терпит неудачу, потому что вы передаете результат поиска sed вместо содержимого файла.

Кроме того, если вы хотите изменить содержимое файлов с помощью sed, вам необходимо использовать -i, чтобы изменения выполнялись «на месте».

Вы можете попробовать это:

for file in *.SVG 
do 
    sed -i '$ s/.$//' $file 
done 

Или:

find . -name "*.SVG" -exec sed -i '$ s/.$//' {} \; 
+0

Alvaro Как мне заставить вашу команду работать, только если последний символ^@? – Andrew

+0

введите до периода до второго $, после периода типа ctrl-v ctrl-m (без пробела между ними), затем продолжайте набирать с помощью $ ... это должно соответствовать концу линии dos в качестве последнего символа строки –

+0

Так было бы: найти. -name "* .SVG" -exec sed -i '$ s /.^ v^m $ //' {} \; Я пробовал это в bash, и он просто положил^M в пятно (.^M $). Но конечный символ файла DOS - это^@. Как мне получить^@? Я пробовал^v^@, но ничего не случилось. – Andrew