Каковы некоторые способы сравнить тип файла и кодировки, чтобы разрешить багги grep …?

В этом случае у меня есть папка с файлами .txt, которые я создал с помощью перетаскивания, копирования и вставки из Adobe Acrobat PDF и текстового редактора в OSX. Я редактировал эти файлы в vim. Теперь я использую grep для поиска заметок в этих файлах. Например,

grep -c "\[t\]" Herbert* 

[t] – это примечание, и каталог имеет 22 файла с именем-префиксом Herbert* (как в Herbert-02-Transformation.txt , Herbert-14-Classification.txt ). Проблема grep только находит строку поиска в одном файле ( Herbert-03-Square.txt ), но каждый файл имеет одну и ту же ноту много раз.

Отображение файлов проблем, converted в строку состояния, когда я их открываю,

 "Herbert-02-Transformation.txt" [converted] 276L, 57171C 

Сообщение на unix.stack предполагает, что специальные символы из оригинала пережили поездку из PDF в vim, чтобы вызвать эту проблему с grep . Я удалял символы borked и вручную вставлял правильные :digraphs . Некоторые отредактированные файлы доступны для поиска по grep, а другие редактируемые файлы – нет. Я попытался использовать,

 :e Herbert-02-Transformation.txt :set encoding=utf-8` :w 

но файл все еще открывается, как показано выше. Теперь я думаю, мне нужно выяснить, как сравнить кодировки тех файлов, где работает grep и тех, где это не так. Есть достаточно страниц справки, в которых подробно описано, как настроить обнаружение файлов в .vimrc, чтобы избежать этой проблемы, которую я потратил более 1,5 часов, исследуя это, и теперь я думаю, что это хороший вопрос …

  • Что это за тема vim?
  • Конфигурация Vim для определенных типов файлов
  • Как копировать из одного экземпляра vim в другой с помощью регистров
  • Использование среднего щелчка мыши для вставки текста вступает в режим вставки
  • Редактировать текст с помощью vim
  • Как повторно показать этот приветственный экран vim?
  • Vim: копирование из файла в буфер обмена
  • Почему пробелы не включаются в обернутый контент vim backreference?
  • 2 Solutions collect form web for “Каковы некоторые способы сравнить тип файла и кодировки, чтобы разрешить багги grep …?”

    Проще всего сделать несколько строк из одного из проблемных файлов через od :

     head Herbert-02-Transformation.txt | od -c 

    Или, если вы не видите ничего странного в первых строках, найдите свою конкретную строку и несколько символов вокруг нее:

     od -c Herbert-02-Transformation.txt | grep -C 5 "\[" 

    Например:

     $ echo "lorem ipsum [t] dolor sit amet" > foo.txt $ od -c foo.txt 0000000 loremipsum [ t ] 0000020 dolorsitamet \n 0000037 

    Любые «странные» символы будут отображаться od .


    Другим полезным инструментом является file который вернет тип файла и другую информацию:

     $ file --mime foo.txt foo.txt: text/plain; charset=us-ascii 

    Если у вас есть текстовый файл с известной кодировкой, с недопустимыми символами между ними, которые не принадлежат этой кодировке, вы можете отфильтровать их с помощью iconv -c -f charset -t charset file . Будьте осторожны, чтобы не перезаписать исходный файл в процессе, поскольку результат может быть катастрофическим, если вы выберете неправильную кодировку.

    например, избавиться от умлаутов:

     $ echo Nähkästchen | iconv -c -f us-ascii -t us-ascii Nhkstchen 

    Поиск и замена могут быть более подходящими, хотя те символы, которые у вас есть, в любом случае имеют смысл. Зависит от того, что на самом деле там.

    Linux и Unix - лучшая ОС в мире.