RegEx Соответствие по тексту и новой строке - PullRequest
1 голос
/ 04 мая 2020

У меня есть файл, который добавляет двоичный файл к сценарию bash (в данном случае ISO). В конечном итоге он разбирается, выполняя скрипт bash для установки ISO. Скрипт bash заканчивается уникальной строкой; « DATA » и во время выполнения скрипт удаляет все, что находится выше, включая эту строку.

Однако он не удаляет завершающую новую строку, что означает, что новый файл (который должен быть просто двоичными данными ISO) начинается с новой строки, ломая ISO.

Регулярное выражение, удаляющее данные выглядят следующим образом

sed -re '1,/^__DATA__$/d'

Просмотр файла с cat -e Я пытаюсь сопоставить и удалить $ после __DATA__$

#cat -et file.bin

echo "I: Installation finished!"$
exit 0$
$
__DATA__$
$
3<ED>M-^PM-^PM-^PM-^PM-^

1 Ответ

1 голос
/ 11 мая 2020

Я предлагаю использовать

sed -n '/__DATA__/{n;:1;n;p;b1}' file

Здесь -n подавляет вывод строк по умолчанию, затем находится первая строка, содержащая __DATA__, и затем строка считывается в пространство образца, и тогда все последующие строки читаются и печатаются. Итак, мы пропускаем часть файла до строки __DATA__ и следующей строки.

См. online sed demo

s='#cat -et file.bin

echo "I: Installation finished!"
exit 0

__DATA__

3<ED>M-^PM-^PM-^PM-^PM-^'

sed -n '/__DATA__/{n;:1;n;p;b1}' <<< "$s"

Вывод:

3<ED>M-^PM-^PM-^PM-^PM-^
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...