如何从文本中提取所有以www开头、.com结尾的链接?
提取文本中以
www开头、.com结尾的链接 方法1:使用grep(简洁高效,推荐)
借助grep的Perl正则匹配能力,只输出匹配的目标内容:
grep -oP 'www\.[^"]*\.com' body.txt
-o:仅输出文本中匹配的片段,而非整行内容-P:启用Perl兼容正则表达式- 正则
www\.[^"]*\.com:匹配以www.开头,后续为任意非引号字符(适配示例中链接被双引号包裹的格式),最终以.com结尾的内容
方法2:使用sed
通过替换提取目标内容,再过滤空行:
sed -E 's/.*?(www\.[^"]*\.com).*/\1\n/g' body.txt | grep -v '^$'
-E:启用扩展正则表达式- 替换规则:将每行里的目标串提取出来,替换为目标串加换行符,最后用
grep -v '^$'清除替换产生的空行
方法3:使用awk
循环遍历每行,逐个匹配并输出目标内容:
awk '{while(match($0, /www\.[^"]*\.com/, arr)) {print arr[0]; $0=substr($0, RSTART+RLENGTH)}}' body.txt
match()函数查找每行符合正则的内容,结果存入数组arr- 打印匹配内容后,将当前行剩余部分更新为匹配位置之后的内容,继续循环查找下一个匹配项
适配调整
如果你的文本里链接不是被双引号包裹,可把正则中的[^"]替换为[^[:space:]](匹配任意非空白字符),适配更通用的场景。
内容的提问来源于stack exchange,提问作者gdeniz
相关产品推荐
相关产品推荐

