Почему эта команда -строки sed не работает так, как я думал?

  1. Строго говоря, все наоборот :Образы компакт-дисков CentOS предоставляют моментальный снимок (подмножества )сетевых репозиториев.

  2. Содержимое действительно представляет собой локальный репозиторий, из которого устанавливаются пакеты без необходимости доступа к онлайн-зеркалам.

  3. Между прочим, TRANS.TBLприсутствует только на компакт-дисках, потому что он используется для кодирования информации о файловой системе , которая не может быть представлена ​​с использованием базовой файловой системы ISO 9660 CD .

0
17.09.2021, 09:19
1 ответ

С вашим RegEx есть две проблемы. Это может быть связано с непониманием того, как работают регулярные выражения.

  1. Вы использовали «расширенный» синтаксис регулярных выражений, который делает ()специальные символы, используемые для обозначения групп захвата. Однако в остальном они не мешают самому механизму согласования. Поскольку вы не используете группу захвата, ваше регулярное выражение составляет
    ^.*content=\"\">$
    
    который ожидает шаблон content=""с пустой строкой в ​​кавычках, и сразу после закрытия>. Этого не происходит в вашем вводе, поэтому sedничего не делает, так как совпадение не достигается.(Между прочим, вам не нужно экранировать "-, они не являются особыми в RegEx, и ваша программа заключена в одинарные -кавычки, поэтому оболочка также не будет неправильно интерпретировать ".)
  2. Даже если вы исправите это, как в
    ^.*content="[^"]*".*>$
    
    вы заменяете совпадающую часть строки, которая из-за якорей является всей линией ,с пустой строкой, поэтому в вашем случае ничего не останется.

Чтобы облегчить ситуацию, вам нужно будет вернуться к первоначальной идее использования группы захвата, но использовать ее, чтобы содержать соответствующую часть строки, а затем заменить всю строку содержимым группы захвата, как в:

sed -E 's;^.*content="([^"]*)".*$;\1;'

Это определит содержимое между первым и следующим "после имени атрибута content=как группу захвата, но в остальном соответствует всей строке. Затем он заменит всю строку только содержимым группы захвата с помощью выражения \1.

3
17.09.2021, 10:06

Теги

Похожие вопросы