Sed/Bash新手求助:从字符串提取指定域名并输出到文件
用sed/bash提取双引号内的域名
嘿,作为sed/bash新手,想要从那串混杂的字符串里精准抠出双引号里的域名(像.com/.info/.xyz这类后缀的),我给你俩实用的方案,上手简单还靠谱~
方案一:grep + sed 组合拳
这个组合分工明确,grep负责把所有双引号里的内容抓出来,sed再筛选出符合后缀的域名,还能自动去掉双引号:
# 假设你的源内容存在input.txt文件里,执行以下命令 grep -o '"[^"]*"' input.txt | sed -n '/\.\(com\|info\|xyz\)$/s/"//gp' > output_domains.txt
命令拆解:
grep -o '"[^"]*"':-o参数让grep只输出匹配到的部分,"[^"]*"匹配所有被双引号包裹的内容(从双引号开始,到下一个双引号结束,中间不含双引号)。sed -n '/\.\(com\|info\|xyz\)$/s/"//gp':-n表示只输出我们指定的行;/\.\(com\|info\|xyz\)$/用来匹配以.com/.info/.xyz结尾的内容;s/"//g把内容里的双引号全部去掉;p打印最终筛选后的结果。
> output_domains.txt:把结果写入到新文件output_domains.txt里。
方案二:纯sed单命令处理
如果你不想用grep,纯sed也能搞定,还能顺便去重(如果有重复域名的话):
sed -n 's/.*"\([^"]*\.\(com\|info\|xyz\)\)".*/\1/gp' input.txt | sort -u > output_domains.txt
命令拆解:
sed -n 's/.*"\([^"]*\.\(com\|info\|xyz\)\)".*/\1/gp':用替换模式,找到字符串里符合后缀的双引号内容,提取出括号里的域名部分;sort -u:对结果排序并去掉重复的域名(可选,根据你的需求决定要不要加)。
测试效果
拿你给的源字符串测试,运行命令后,output_domains.txt里的内容就是:
domain.com anotherdomain.info domain.xyz
内容的提问来源于stack exchange,提问作者Bridget Roe
相关产品推荐
相关产品推荐

