多个名称匹配模式

时间:2016-03-14 08:46:05

标签: regex perl unix

输入文件:文件名=' sample1.txt'

  1. 狮子是好朋友(Host = lion)(Port = animal),老虎是 (主机=虎)(端口=一个)

  2. 汉堡是一种食物(Host = Burger)(Port = Food)

  3. 我有上面的txt文件中显示的数据。我想从txt文件中收集每行中的主机和端口,并将它们放在新的txt文件中

    必需的文件:

    • 狮子:动物
    • 虎:一个
    • 汉堡:食品

    使用的代码直到nw:

    cat sample1.txt | perl -ne 'print "$1=$2\n" if(/Host=([\w.]*.'-'*[\w.]*.).*Port=(\d+)/)' > sample2.txt
    
    sed 's|[()]||g' sample2.txt > sample3.txt
    

    获得的输出:

    • 狮子:动物
    • 汉堡:食品

    没有得到老虎和一个:

    问题:我无法将主机和端口放在同一行中,然后再出现一次..在某些线路上它只有一个主机和端口值...在那里的另一行是不止一个主机和端口值..请帮我解决这个问题..谢谢你.. :)

1 个答案:

答案 0 :(得分:0)

如果您希望按照外观顺序排列所有条目,可以使用以下内容:

perl -nle 's{Host=([^)]*).*?Port=([^)]*)}{print "$1:$2"}ge' < sample1.txt > sample3.txt