我有一个很大的 IP 地址列表(大多数是 IPv4,但少数是 IPv6),后面跟着一个空格,然后是一个域名,后面跟着另一个空格和带有“www”的相同域名。在它的前面。每个实例都位于其自己的线路上。该列表看起来像这样(但要大得多):
23.212.109.137 at.ask.com www.at.ask.com
216.58.206.74 maps.googleapis.com www.maps.googleapis.com
2400:cb00:2048:1::6812:32a5 litscape.com www.litscape.com
104.16.244.35 loc.gov www.loc.gov
216.70.104.235 mbu.edu www.mbu.edu
我想知道两个查找和替换命令;每个在最后一个之后生成另一个文本文件。
1)第一个命令应该查找并替换一切在“www”之前。与“http://”,这样第二个文本文件的行将如下所示:
http://www.at.ask.com
http://www.maps.googleapis.com
http://www.litscape.com
http://www.loc.gov
http://www.mbu.edu
2)第二个命令应该查找并替换“的所有实例http://www.” 在第二个文本文件中,这样第三个文本文件的行将如下所示:
at.ask.com
maps.googleapis.com
litscape.com
loc.gov
mbu.edu
谢谢。
答案1
与单awk命令:
awk '{ print $2 > "domains.txt"; print "http://"$3 > "domains_http.txt" }' file
结果:
> cat domains_http.txt
http://www.at.ask.com
http://www.maps.googleapis.com
http://www.litscape.com
http://www.loc.gov
http://www.mbu.edu
> cat domains.txt
at.ask.com
maps.googleapis.com
litscape.com
loc.gov
mbu.edu
答案2
第二件事是最简单的:
$ cut -d ' ' -f 2 file.in
这使用cut
空格作为分隔符并剪切第二列。
有了awk
它,这两项任务就可以轻松完成:
$ awk '{ print $2 }' file.in
这与命令的作用基本相同cut
。
$ awk '{ print "http://" $3 }' file.in
这需要第三列并http://
在输出之前添加到它前面。
答案3
使用 sed:
sed 's#.*\(www.*\)#http://\1#' source_file > dest_file1
sed 's#.*www\.\(.*\)#\1#' dest_file1 > dest_file2
解释:
对于第一个要求,开始对 中的所有内容进行分组www
,并将不属于该组的所有内容替换为http://
。第二个文件也类似,但现在从后面开始分组www.
请注意,如果您想要命令要完成这些工作,您始终可以将它们别名为自定义命令。