Обработка исключений sed с экранированными символами

Я хочу удалить все, что следует за символом % до конца строки. С помощью

 cat /tmp/foo.txt | sed 's/%.*$//' 

отлично работает с одним исключением: я хочу игнорировать любые экранированные процентные знаки \% . Итак, со следующим файлом, сохраненным как /tmp/foo.txt

 abcd %123 xyz \%xyz xyz \%xyz %123 

выход, который я хочу, это

 abcd xyz \%xyz xyz \%xyz 

Какая уместная регулярная обработка исключений для этого?

One Solution collect form web for “Обработка исключений sed с экранированными символами”

Вам нужно посмотреть на персонажа перед процентом.

 sed 's/\([^\\]\)%.*/\1/' 

Если предыдущий символ не является обратным слэшем, сохраните этот символ и удалите остальные.

Этот ответ предполагает, что % не появляется в начале строки. Если это так, то нам нужно проверить это

 sed 's/\(^\|[^\\]\)%.*/\1/' 
  • Как печатать строки между шаблоном 1 и 2-м совпадением шаблона2?
  • Как удалить символ новой строки из строк, предшествующих определенному шаблону?
  • Использование sed / awk для извлечения первого «токена не-whitspace» в каждой строке
  • ksh / bash Форматирование файлов через sed по файлу cat | команда sed
  • Сложное содержимое переменной не попало в sed
  • Как добавить текст в конец строки, когда шаблон сопоставлен?
  • Как удалить формат даты
  • Как найти и заменить текст sed, содержащий звездочку *
  • Как печатать текст между первым вступлением пары строк?
  • Регулярное изменение / оператор (foo | bar) в GNU или BSD Sed
  • умножение каждой строки
  • Interesting Posts

    Как использовать sed, как заменить строку, содержащую шаблон, содержимым из другого файла?

    Как подключить вывод find в качестве входного для diff?

    Как запустить gedit с терминала и отсоединить его (как работает команда «subl»)?

    Как расширить раздел CentOS 5 на VMware?

    Почему xdg-open использует Firefox, а не приложение по умолчанию в соответствии с xdg-mime?

    Почему программы работают с sudo, не имеют системной темы?

    Как обновить Redhat от 5.5 до 5.6

    Каков синтаксис файлов /etc/yum.repos.d/*.repo официальных репозиториев RHEL?

    Почему каталог должен иметь липкий бит без исполняемого бита?

    Как преобразовать открытый ключ ssh-keygen в формат, который открывает функцию PEM_read_bio_RSA_PUBKEY ()?

    Linux Live CD не может воспроизводить видео

    Безопасно ли для моего пользователя ssh предоставить пароль sudo для `apt-get update` и` apt-get upgrade`?

    ./configure: показать все отсутствующие пакеты одновременно

    Хранить LXPanel сверху в Openbox

    запускать grep cmd рекурсивно и печатать имя пути и результат

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