
Я хочу использовать sed для этого файла, но BRE в sed работает не так хорошо, как я надеюсь.
Сейчас у меня есть по сути только:
$ cat Dungeon | grep -P -o '<\/.*?>'
Мой вопрос в том, как мне сделать sed? Я хочу удалить части, которые мне удалось grep. Альтернативы также приветствуются; хотя, если возможно, я хочу знать, как это сделать.
(Да, я использую регулярные выражения в HTML)
решение1
Используйте инструмент «PCRE sed»:
cat Dungeon | perl -pe 's/<\/.*?>//g'
perl -i -pe 's{</.*?>}{}g' Dungeon
Объединение grep и sed вряд ли произойдет; эти два не обмениваются достаточным контекстом, чтобы передать существующие совпадения с их позицией в файле. Вы можете попробовать grep -b
получить байтовые смещения каждого совпадения (и использовать их счто-то еще, кроме sedчтобы удалить соответствующие диапазоны байтов из файла), или попробуйте преобразовать grep -o
вывод в гигантское регулярное выражение, подходящее для расширенных регулярных выражений POSIX sed (заменив переносы строк на вертикальные черты для a|b|c
синтаксиса ветвления, убедившись, что все специальные символы регулярных выражений экранированы — для этого потребуется еще один вызов 'sed'), но в любом случае это потребует гораздо больше усилий, чем пользы.