Как grep сопоставляет URL-адреса каталогов? - PullRequest
1 голос
/ 07 августа 2020

Это файл. xml, в котором хранится большое количество URL-адресов, и выглядит он следующим образом:

<url><loc>http://www.example.com/</loc><changefreq>daily</changefreq></url>
<url><loc>http://www.example.com/en/rWGpqHtU/</loc><changefreq>daily</changefreq></url>
<url><loc>http://www.example.com/de/hVHaViPm/</loc><changefreq>daily</changefreq></url>
<url><loc>http://www.example.com/uk/ysbqqLRj/</loc><changefreq>daily</changefreq></url>
<url><loc>http://www.example.com/jp/EUvnikfR/</loc><changefreq>daily</changefreq></url>
<url><loc>http://www.example.com/hk/UqGauZTv/</loc><changefreq>daily</changefreq></url>

Как сопоставить URL-адрес, который начинается с http://www.example.com/uk/ и http://www.example.com/hk/?

Это то, что я пробовал до сих пор, и он будет соответствовать всем URL-адресам.

cat sitemap.xml | grep -Eo "(http|https)://[a-zA-Z0-9./?=_%:-]*"

Спасибо!

1 Ответ

1 голос
/ 07 августа 2020

Вы можете использовать

grep -Eo 'https?://www\.example\.com/[uh]k/[^<]*'

Здесь -E включает синтаксис POSIX ERE, и шаблон соответствует:

  • https?:// - http:// или https://
  • www\.example\.com/ - www.example.com/
  • [uh]k/ - uk/ или hk/
  • [^<]* - 0 или более символов, кроме <.

См. онлайн-демонстрацию :

#!/bin/bash
xml='<url><loc>http://www.example.com/</loc><changefreq>daily</changefreq></url>
<url><loc>http://www.example.com/en/rWGpqHtU/</loc><changefreq>daily</changefreq></url>
<url><loc>http://www.example.com/de/hVHaViPm/</loc><changefreq>daily</changefreq></url>
<url><loc>http://www.example.com/uk/ysbqqLRj/</loc><changefreq>daily</changefreq></url>
<url><loc>http://www.example.com/jp/EUvnikfR/</loc><changefreq>daily</changefreq></url>
<url><loc>http://www.example.com/hk/UqGauZTv/</loc><changefreq>daily</changefreq></url>'
grep -Eo "https?://www\.example\.com/[uh]k/[^<]*" <<< "$xml"

Вывод:

http://www.example.com/uk/ysbqqLRj/
http://www.example.com/hk/UqGauZTv/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...