替换文本和重复项

时间:2011-05-09 03:53:25

标签: regex linux replace

我有一个日志文件,其中的行填充了这样的内容:

/home/Users/b/biaxib/is-clarithromycin-effective-against-strep.html
/home/Users/b/hihi/low-cost-biaxin-free-shipping.html
/home/Users/b/hoho/no-script-biaxin-fast-delivery.html
/home/Users/b/ihatespam/no-script-low-cost-biaxin.html

我想只提取用户名部分,然后删除重复项,以便我只留下这个:

biaxib 
hihi 
hoho
ihatespam

规则集是:

  • 在末尾提取“/ home / Users /”和“/ .....”之间的文字
  • 在应用上述规则后删除重复的行
  • 在Linux中执行此操作

有人可以帮我解决如何创建这样的脚本或声明吗?

2 个答案:

答案 0 :(得分:1)

假设用户名始终显示在路径的第4个组成部分:

$ cat test.txt
/home/Users/b/biaxib/is-clarithromycin-effective-against-strep.html
/home/Users/b/hihi/low-cost-biaxin-free-shipping.html
/home/Users/b/hoho/no-script-biaxin-fast-delivery.html
/home/Users/b/ihatespam/no-script-low-cost-biaxin.

$ cat test.txt | cut -d/ -f 5 | sort | uniq
biaxib
hihi
hoho
ihatespam

答案 1 :(得分:0)

cat /path/to/your/log/file.txt | python3 -c '                                                                                                                                                                                                                                         
import sys                                                                                                                                                                                                                                                          
for line in sys.stdin.readlines():                                                                                                                                                                                                                                  
    print( line.split("/")[5] )                                                                                                                                                                                                                                     
' | sort | uniq

可能在perl或其他内置工具中可以实现更简洁(参见其他答案),但我个人回避标准的linux文本操作工具(编辑:cut虽然是有用的。)