Как инвертировать команду grep -P?Linux

Anonymous
Как инвертировать команду grep -P?

Сообщение Anonymous »

У меня есть несколько выходных файлов, в которых также печатается весь текст создавшего их сценария. Допустим, каждый из этих файлов, являющихся результатом работы "oops.sh", выглядит следующим образом:

Код: Выделить всё

Hello world!
This script is called #!bash
scriptName=$(echo $0)
echo """Hello world!
This script is called $scriptName."""
# Wait, WTF just happened?
echo "Done.".
Done.
Я хотел бы использовать команду grep или sed, чтобы удалить текст исходного сценария. Результат должен выглядеть следующим образом:

Код: Выделить всё

Hello world!
This script is called .
Done.
Я успешно нашел то, что хочу удалить — grep -Pazo "(?s)\#\!bash.*?Done\.\"" outputOops.txt
code> -- но я не могу инвертировать результаты (на самом деле я не знаю Perl, кстати, и, к сожалению, сейчас у меня нет времени его изучать. Я зашел так далеко, основываясь на некоторых ответах StackOverflow, но не понял другие соответствующие ответы достаточно хорошо, чтобы использовать их.) Каждое из следующих значений ничего не возвращает --

Код: Выделить всё

grep -Pazov "(?s)\#\!bash.*?Done\.\"" outputOops.txt
grep -Pazo -v "(?s)\#\!bash.*?Done\.\"" outputOops.txt
grep -Pazo --invert-match "(?s)\#\!bash.*?Done\.\"" outputOops.txt
grep -Pazo "(?s)(?!)\!bash.*?Exiting\.\"" outputOops.txt
grep -Pazo "(?s)(?!)(\!bash.*?Exiting\.\")" outputOops.txt
-- кроме двух последних строк, обе из которых возвращают -bash: !: событие не найдено.
Что я делаю неправильный? Отрицание просто не работает с флагом -P? Если нет, что я могу сделать вместо этого?

Подробнее здесь: https://stackoverflow.com/questions/788 ... -p-command

Вернуться в «Linux»