如何使用sed或awk提取文件中的指定域名并输出到新文件?
文本提取解决方案
嘿,我来帮你搞定这个域名提取的需求!针对你手里的file1内容,这里有两个实用的sed命令方案,能快速帮你去掉多余字符串,提取出想要的域名:
方案一:分步替换多余内容
直接把每行开头的** server can't find 和结尾的: NXDOMAIN替换为空就行,命令如下:
sed 's/\*\* server can'\''t find //; s/: NXDOMAIN//' file1 > new_file.txt
小解释:
- 因为shell里单引号需要转义,所以用
'\''来表示can't里的单引号,确保命令能正确执行 - 分号分隔两个替换操作,先处理开头的冗余内容,再处理结尾的
- 最后把结果重定向到
new_file.txt,就是你要的干净域名列表啦
方案二:正则捕获精准提取
如果你的文本格式非常固定,也可以用正则直接捕获中间的域名部分,只保留这部分内容,更精准:
sed -E 's/^\*\* server can'\''t find ([^:]+): NXDOMAIN$/\1/' file1 > new_file.txt
小解释:
-E启用扩展正则,让语法更简洁([^:]+)匹配冒号前的所有字符(域名里不会有冒号,刚好完美匹配),把这部分标记为捕获组\1引用这个捕获组的内容,相当于直接把整行替换成我们要的域名
执行完任意一个命令后,new_file.txt里的内容就会是:
bla.bla.com
bla2.bla.com
bla3.bla.com
bla4.bla.com
bla5.bla.com
要是你之前的sed命令没生效,大概率是单引号转义或者正则匹配范围的问题,可以试试上面的方案哦~
内容的提问来源于stack exchange,提问作者Lewie
相关产品推荐
相关产品推荐

