您好如何使用sed或awk提取与正则表达式匹配的子字符串。
我已经看过几个修改或更改子字符串,但我只想获得匹配的部分。
我的数据如下所示:
<loc>http://www.A.com/sitemap1.gz</loc>
<loc>http://www.A.com/sitemap2.gz</loc>
<loc>http://www.A.com/sitemap3.gz</loc>
<loc>http://www.A.com/sitemap4.gz</loc>
<loc>http://www.A.com/sitemap5.gz</loc>
<loc>http://www.A.com/sitemap6.gz</loc>
<loc>http://www.A.com/sitemap7.gz</loc>
<loc>http://www.A.com/sitemap8.gz</loc>
输出应该看起来像
http://www.A.com/sitemap1.gz
http://www.A.com/sitemap2.gz
http://www.A.com/sitemap3.gz
....
我试过
cat data | sed 's/'http.*gz'//'
但是这个命令实际上删除了我想要保留的部分。 感谢
答案 0 :(得分:4)
一个简单的grep
将使用-o
选项:
$ grep -o 'http[^<]*' file
http://www.A.com/sitemap1.gz
http://www.A.com/sitemap2.gz
http://www.A.com/sitemap3.gz
http://www.A.com/sitemap4.gz
http://www.A.com/sitemap5.gz
http://www.A.com/sitemap6.gz
http://www.A.com/sitemap7.gz
http://www.A.com/sitemap8.gz
使用awk
,您可以:
$ awk -F'[<>]' '{print $3}' file
http://www.A.com/sitemap1.gz
http://www.A.com/sitemap2.gz
http://www.A.com/sitemap3.gz
http://www.A.com/sitemap4.gz
http://www.A.com/sitemap5.gz
http://www.A.com/sitemap6.gz
http://www.A.com/sitemap7.gz
http://www.A.com/sitemap8.gz
答案 1 :(得分:2)
这个sed应该有效:
sed 's/^.*\(http.*gz\).*$/\1/' file
OR grep -P(--perl-regexp)也可以完成这项工作:
grep -Po '(?<=<loc>).*?(?=</loc>)' file