如何在 Ubuntu 16.04 上使用单个命令执行此操作?

如何在 Ubuntu 16.04 上使用单个命令执行此操作?

我有一个 URL 文件,其格式如下所示:

com.blendtuts/S
°=
com.blengineering.www/:http
±=
com.blenheimgang.www/le-porsche-museum-en-details/porsche-museum-3
²=
com.blenheimsi
³=
com.blenkov.www/page/media/18/34/376
´=
com.blentwell.www/bookmarks.php/jackroldan/sp
¸=
com.blentwell.www/tags.php/I

文件大小以 GB 为单位。文件大小约为 250 GB。

我试图反转文件中的单词并仅从文本中提取域。我尝试使用 Ubuntu OS 终端命令来实现这一点。让我告诉你我尝试过的方法:

首先我使用以下命令删除了“/”后的数据:

~$ ex -sc '%s/\(\/\).*/\1/ | x' newfile.txt > ddm.txt

结果如下:

com.blendtuts/
 °=
com.blengineering.www/
±=
com.blenheimgang.www/
²=
com.blenheimsi
³=
com.blenkov.www/
´=
com.blentwell.www/
¸=
com.blentwell.www/

现在我使用以下解决方案反转了文件中的完整文本: https://stackoverflow.com/questions/40467918/how-to-reverse-the-word-in-ubuntu

并得到以下结果:

    /blendtuts.com
    °= /www.blengineering.com
    ±= /www.blenheimgang.com
    ²= blenheimsi.com
    ³= /www.blenkov.com
    µ=  /www.blentwell.com
    ¶=  /www.blentwell.com
    •=  /www.blentwell.com

/www.blentwell.com

但问题仍然没有解决。我想知道如何使用 Ubuntu 提取 URL 并将其放入另一个文件中。如您在输出上方看到的,我仍然没有域名,它带有反斜杠。

如果使用其他操作系统可以解决此类问题,请告诉我。我更喜欢使用 Ubuntu。

我想从文件中提取域并将它们分离到另一个文件中,并且采用适当的格式。

如果我获得了唯一域名,那么它将是我查询的绝佳解决方案。否则,我将使用以下命令:

$ sort filename.txt | uniq > save_to_file.txt

请尽量不要使用 awk 命令给我提供解决方案,因为它在我的系统上不起作用。

样本数据:

com.blendschutzrollo.www/d_chefsessel6_Maxx_Chefsessel_mit_Kopfstutze_Chefdrehsessel___Munchen__374
¯= 
com.blendtuts/S
°= 
com.blengineering.www/:http
±= 
com.blenheimgang.www/le-porsche-museum-en-details/porsche-museum-3
²= 
com.blenheimsi
³= 
com.blenkov.www/page/media/18/34/376
´= 
com.blenoir.www/lat
µ= 
com.blentwell.www/bookmarks.php/bashment%20jack/re
¶= 
com.blentwell.www/bookmarks.php/djcable/rt
·= 
com.blentwell.www/bookmarks.php/jackroldan/sp
¸= 
com.blentwell.www/tags.php/I
¹= 
com.blentwell.www/tags.php/eurot
º= 
com.blentwell.www/tags.php/mitarbeiters
»= 
com.blentwell.www/tags.php/verw
¼= 
com.blenzblog/tag/olympic-w
½= 
com.blepharoplastyusa.www/albany-n
¾= 

答案1

Perl 解决方案,适应字符串反转解决方案之一

$ perl -F/ -anle 'print reverse(split("([^.]*)", $F[0])) if /\./' input
www.blendschutzrollo.com
blendtuts.com
www.blengineering.com
www.blenheimgang.com
blenheimsi.com
www.blenkov.com
www.blenoir.com
www.blentwell.com
www.blentwell.com
www.blentwell.com
www.blentwell.com
www.blentwell.com
www.blentwell.com
www.blentwell.com
blenzblog.com
www.blepharoplastyusa.com

论点:

  • -F/ -aF根据输入的每一行创建一个数组,并按 进行拆分/
  • -nle-e <expr>在输入的每一行上运行表达式 ( ),而不自动打印 ( -n),同时处理每行末尾的换行符 ( -l)
  • 该行已按 拆分/,我们只需要第一个 之前的部分/,因此数组的第一个元素为F$F[0]然后我们按 拆分它.并反转每个元素,并打印该行是否包含.

现在你可以sort -u这样做。

答案2

能否获取 'com' 和 'www' 之间的所有内容?然后使用 'sed' 打印它们

sed -ne 's/com\.\(.*\)\.www\(.*\)/www.\1.com/p' infile

这将忽略输入样本中没有“www”的两行。

相关内容