Как заменить или удалить строки, содержащие символ / в BASH?

У меня есть файл, который начинается с нескольких текстовых строк и продолжается множеством двоичных строк. Мне нужно удалить текстовую строку с ее начала, чтобы получить чистое двоичное содержимое. Предположим, что бинарный раздел начинается со специального слова, например: Connection. Я попытался сделать это, используя сценарий bash с sed, чтобы удалить все эти текстовые строки. Проблема в следующем: текстовые строки, содержащие символ /, заставляют sed интерпретировать символ после / как отдельную команду. Мой код такой:

while read line
  do
        sed -i "/"$line"/d" file_name

        if [ "$line" != Connection* ]
                break;

  done < file_name

таким образом, когда переменная «строка» содержит / символов (например, css/jj), sed возвращает ошибку:

sed: -e выражение #1, символ 6: неизвестная команда: `j'

Как я могу передать переменные, содержащие символ /, в sed для удаления связанных строк? Кстати, есть ли способ отделить бинарное содержимое от текста в файле? Иногда в моих файлах нет специального слова или знака в начале двоичного раздела, чтобы его распознать.


person Setareh    schedule 18.04.2011    source источник


Ответы (1)


Вы можете безопасно заменить разделитель / любым другим символом, при условии, что вы заменяете его каждый раз. Иногда я использую §, что довольно редко встречается в большинстве текстов.

person mouviciel    schedule 18.04.2011
comment
Спасибо за ваш ответ, но, как я читал в учебниках по sed, использование других разделителей возможно только для замены (с флагом s) и невозможно для удаления. к счастью, я смог решить свою проблему извлечения двоичного содержимого из файлов (на самом деле файлов потока tcp, полученных из tcpflow) с помощью передового инструмента, а затем настроить его конфигурацию. - person Setareh; 20.04.2011
comment
Вы оба правы и не правы. Адрес в форме /.../ может быть изменен на \c...c, где c — любой символ. При использовании команды s/.../.../ разделители могут быть изменены следующим образом: sc...c...c, где c — любой символ. - person potong; 06.01.2012