Sed выводит весь файл

Я пытаюсь проанализировать содержание файла HTML для очистки каталога загрузки, однако я изменил его к MWE, который воспроизводит мою проблему:

sed -e 's|\(href\)|\1|' index.html

Печатает полноту index.html. Я первоначально думал, что это была проблема с моим выражением, но это очень простое выражение доказывает ту несправедливость.

То же происходит, если я удаляю -e или если я добавляю g в конце.

Это было некоторое время, так как я сделал sed, я делаю что-то не так здесь? sed запутывается с символами в файле HTML?

-1
задан 22 March 2019 в 12:27

3 ответа

необходимо использовать grep найти текст в файле
sed лучше для текстовых замен

Если Вы хотите перечислить гипертекстовые ссылки, Вы можете просто grep файл как это:

grep -Po '(?<=href=")[^"]*' index.html
2
ответ дан 26 October 2019 в 00:10

То, что у Вас есть экс-наструганные звуки как нормальное поведение sed используемый с командой sзамена. Я предполагаю, что Вы ищете что-то вроде этого:

sed -nr 's/^.*href="(http.*)".*$/\1/p' index.html 

Где:

  • / используется в качестве разделителя в этом случае (можно использовать | или #, и т.д.).

  • Опция -n (--quiet, --silent) подавите автоматическую печать пространства шаблона, и наряду с этой опцией мы должны использовать некоторую дополнительную команду (команды) для сообщения sed, что распечатать.

  • Эта дополнительная команда является командой печати p, добавленной в конец сценария. Если sed не был запущен с-n опции, команда p копирует вход.

  • Опция -r включает расширенные регулярные выражения. Без этой опции наша команда может быть:

    sed -n 's/^.*href="\(http.*\)".*$/\1/p' index.html
    
  • Команда s замена средств: #<string-or-regexp>#<replacement>#.

  • ^ будет соответствовать к началу строки. $ будет соответствовать в конец строки.

  • в, группа получения (http.*), будет рассматриваться как переменную \1.

Пример использования:

$ cat index.html 
<!DOCTYPE html>
<html><head><title>Page Title</title></head><body>
    <h1>My First Heading</h1>
    <p>My first paragraph.</p>
    <a href="https://www.w3schools.com">Visit W3Schools</a>
</body></html>

$ sed -nr 's/^.*href="(http.*)".*$/\1/p' index.html 
https://www.w3schools.com

Больше примеров:

2
ответ дан 26 October 2019 в 00:10

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

grep "href" index.html |tr ' ' '\n'|grep "^href" |cut -f2 -d'='

Первое grep выбирает только строки, которые содержат href. tr преобразовывает пробелы в новые строки. Второе grep захваты просто раздел href Вы интересовались. Наконец, cut захваты все после"href=".

1
ответ дан 26 October 2019 в 00:10

Другие вопросы по тегам:

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