grep и вернуть содержимое href, если оно совпадает? - PullRequest
1 голос
/ 14 декабря 2011

Вот мой текущий grep:

grep -l -R "battle/" * > /home/results.txt
(This returns the files that it is in)

Я хочу просмотреть каждый файл и найти экземпляр "battle /", а затем составить список ссылок, на которые он указывает.

Например:

<a href="http://www.site.com/battle/index.php">Index</a>
<a href="http://www.site.com/battle/contact.php">Contact</a>
<a href="http://www.site.com/battle/go/here/folder/file.php">Long weird path</a>

И я хочу, чтобы результаты grep возвращались следующим образом:

http://www.site.com/battle/index.php
http://www.site.com/battle/contact.php
http://www.site.com/battle/go/here/folder/file.php

По сути, у нас есть ссылки на страницы внутри удаляемой папки, поэтому мыЯ хочу найти ссылки, которые все еще используются на этих страницах.

Я хочу найти бой / и вернуть весь путь внутри href.

Затем я хочу, чтобы результаты выводились на мойфайл results.txt.

Как мне поступить с этим grep?Спасибо:)

1 Ответ

2 голосов
/ 14 декабря 2011

Сложно сделать это на 100% надежно, с нулевым риском пропустить то, что вы хотите, или поймать то, что вы не делаете; но хорошим первым приближением может быть:

grep -R -o 'http://www.site.com/battle/[^"]*' * > /home/results.txt

(флаг -o говорит, что «только» выводит фактические сопоставленные строки, а не целые строки, содержащие их.)

Само собой разумеется, что это не будет ловить любые ссылки, использующие относительные URL, такие как <a href="/battle/contact.php"> или еще что-нибудь, и это будет сбит с толку, если ссылка заключает URL в одинарные кавычки вместо двойных кавычек. , , и есть много других способов, которыми это может пойти не так. grep в основном ограничен вашей уверенностью в точной форме ваших входных данных. Если исходные данные изначально не создавались с учетом grep, может быть трудно достичь полной уверенности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...