grep не работает с спецификацией

Я пытаюсь grep строку из файла, но grep ничего не возвращает (даже если строка присутствует в файле). Оказалось, что файл начинается с отметки ÿþ. Если я удалю его вручную, то grep будет работать. Как заставить работать grep, не удаляя спецификацию вручную?


person RegedUser00x    schedule 15.10.2013    source источник
comment
Выложите, пожалуйста, пример файла и команду grep.   -  person fedorqui 'SO stop harming'    schedule 15.10.2013
comment
Наличие спецификации звучит как ошибка; Я не уверен, почему его удаление не является решением.   -  person chepner    schedule 15.10.2013
comment
@anubhava - Этот вопросник спрашивал, как найти файлы со спецификацией, а не как найти текст в таких файлах.   -  person Benj    schedule 22.10.2013
comment
@Benj: Это не тот смысл, который я получил из первого заявления OP I am trying to grep a string from a file but grep returns nothing.   -  person anubhava    schedule 22.10.2013
comment
@anubhava - Я не имею в виду этот вопрос, я имею в виду тот, который вы назвали обманом.   -  person Benj    schedule 23.10.2013
comment
@Benj: В принятом ответе есть sed '1s/^\xEF\xBB\xBF//', которого должно быть достаточно, чтобы сообщить OP, как grep   -  person anubhava    schedule 23.10.2013


Ответы (2)


Как насчет:

strings <file> | grep <pattern>

В качестве альтернативы проверьте страницу руководства вашей grep команды. На самом деле происходит следующее: grep просматривает первые несколько байтов вашего файла и решает, что это двоичный файл и, следовательно, недоступен для поиска. Вы можете переопределить это с помощью:

--binary-files=text
person Benj    schedule 15.10.2013
comment
Предостережение: файлы могут быть закодированы в UTF-16 (-получены из системы Windows?). Тогда grep (и другие методы) не будут работать с многосимвольными шаблонами ascii, даже если спецификация будет удалена. - person rhoerbe; 27.10.2017

Вы также можете использовать cat с параметром -v (visible):

cat -v file | grep pattern
person Cole Tierney    schedule 15.10.2013