查找并替换文本字符串之前的所有内容

查找并替换文本字符串之前的所有内容

我有一个很大的 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.

请注意,如果您想要命令要完成这些工作,您始终可以将它们别名为自定义命令。

相关内容