Удалить несколько спецификаций из файла

Я использую файл Javascript, который представляет собой объединение других файлов JavaScript.

К сожалению, человек, который объединил эти файлы JavaScript вместе, не использовал правильную кодировку при чтении файла и разрешил запись спецификации для каждого отдельного файла JavaScript в объединенный файл JavaScript.

Кто-нибудь знает простой способ поиска в объединенном файле и удаления любых / всех маркеров спецификации?

Было бы здорово использовать PHP или сценарий bash для Mac OSX.


person Macy Abbey    schedule 01.02.2012    source источник
comment
вы пробовали использовать Notepad ++, Encodage ›выберите тот, который должен быть там, конвертируйте его обратно в UTF8-NoBoms   -  person Charles Forest    schedule 01.02.2012
comment
Что такое скомпилированный файл Javascript? Вы наверняка имеете в виду конкатенированный что ли?   -  person mario    schedule 01.02.2012


Ответы (5)


См. Также: Использование awk для удаления метки порядка байтов

Чтобы удалить несколько спецификаций из любого места в текстовом файле, вы можете попробовать что-то подобное. Просто опустите якорь ^:

perl -e 's/\xef\xbb\xbf//;' -pi~ file.js

(При этом файл редактируется на месте. Но создается резервная копия file.js~.)

person mario    schedule 01.02.2012

Обычно я использую vim:

vim -c "set nobomb" -c wq! myfile
person Pål Brattberg    schedule 05.02.2013
comment
Это сработало для меня. Я просто не мог получить команду sed, чтобы разделить их. - person ibic; 07.04.2017

получить файлы спецификации

grep -rIlo $’^\xEF\xBB\xBF’ ./

удалить файлы спецификации

grep -rIlo $’^\xEF\xBB\xBF’ . | xargs sed –in-place -e ‘s/\xef\xbb\xbf//’

исключить .svn dir

grep -rIlo –exclude-dir=”.svn” $’^\xEF\xBB\xBF’ . | xargs sed –in-place -e ‘s/\xef\xbb\xbf//’

person user1896665    schedule 19.11.2014

Я также выяснил это решение, которое полностью работает на PHP:

$packed = pack("CCC",0xef,0xbb,0xbf);
$contents = preg_replace('/'.$packed.'/','',$contents);
person Macy Abbey    schedule 01.02.2012
comment
Вероятно, проще ввести "\xef\xbb\xbf", см. экранирование строки в двойных кавычках. - person Wrikken; 01.02.2012

Я написал сценарий bash, см. здесь, который работает для Mac, я не знаю ' t тестировался на других системах, но я подозреваю, что он должен работать и там. Сценарий также поддерживает файлы или пути к файлам, содержащие пробелы.

Примеры

Удалить спецификацию из всех файлов в текущем каталоге:

rmbom .

Распечатать все файлы со спецификацией в текущем каталоге

rmbom . -a

Удалять спецификацию только из всех файлов в текущем каталоге с расширением txt или cs:

rmbom . -e txt -e cs

Распечатать справку

rmbom -h

person Ludvig W    schedule 17.10.2020