【问题标题】:Sorting multiple different string in a file to a outputfile将文件中的多个不同字符串排序到输出文件
【发布时间】:2019-07-30 01:48:23
【问题描述】:

我正在尝试将具有相同端口的所有 IP 排序到一个输出文件中。我遇到的问题是,使用我使用的语法,输出文件中会出现很多错误的 IP:

cat input.txt | grep ":80" > output.port80.txt

input.txt 的内容:

192.168.1.1:8080
192.168.1.2:80
192.168.1.3:18080
192.168.1.4:808
192.168.1.5:80
...

【问题讨论】:

  • 为您的正则表达式模式添加单词边界:grep ":80\>" input.txt > output.port80.txt
  • 如果你只想port 80 添加一个$ 来表示结束,例如grep ':80$' < input > output PS,不要 cat input |UUOc(不必要地使用 cat)。要么使用重定向,要么只使用grep 第一个文件,例如grep ':80$' input > output

标签: bash sorting awk grep


【解决方案1】:

假设您只需要那些以80 端口结尾的 IP,如果是这种情况,请尝试以下操作。

grep '.*:80$' Input_file > output_file

【讨论】:

    【解决方案2】:

    如果你使用GNU grep,你可以使用:

    grep -P ':80\b' input.txt > output.port80.txt
    

    否则,如果文件以:port 结尾,请使用:

    grep ':80$' input.txt > output.port80.txt
    

    更准确地说,如果:port 后面有空格,

    grep ':80[[:space:]]*$' input.txt > output.port80.txt
    

    但是,使用awk,您可以处理像192.168.1.7:80THINGSafter 这样的情况,
    并删除:port之后的东西:

    awk '(p=index($0, ":80")) && (substr($0,p+3,1) !~ /[0-9]/){print substr($0,1,p+2)}' input.txt > output.port80.txt
    

    【讨论】:

      【解决方案3】:

      你也可以使用 awk

      $ awk -F: ' /:80$/ { print $0  } ' gerald.log
      192.168.1.2:80
      192.168.1.5:80
      
      $ awk -F: ' /:80$/ { print $0 > "output." $2 ".log" } ' gerald.log
      
      $ cat  output.80.log
      192.168.1.2:80
      192.168.1.5:80
      
      $
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-29
        相关资源
        最近更新 更多