Это файл. 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/?
http://www.example.com/uk/
http://www.example.com/hk/
Это то, что я пробовал до сих пор, и он будет соответствовать всем URL-адресам.
cat sitemap.xml | grep -Eo "(http|https)://[a-zA-Z0-9./?=_%:-]*"
Спасибо!
Вы можете использовать
grep -Eo 'https?://www\.example\.com/[uh]k/[^<]*'
Здесь -E включает синтаксис POSIX ERE, и шаблон соответствует:
-E
https?://
http://
https://
www\.example\.com/
www.example.com/
[uh]k/
uk/
hk/
[^<]*
<
См. онлайн-демонстрацию :
#!/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/