【问题标题】:bash remove everything before characterbash 删除字符之前的所有内容
【发布时间】:2011-04-05 08:03:52
【问题描述】:

我有以下几点:

netstat -tuna | awk '{ print $4; }' | sed -e '1,2d'

返回:

10.20.26.143:51697
10.20.26.143:51696
10.20.26.143:51698
10.20.26.143:51693
10.20.26.143:51695
10.20.26.143:51694
:::22
0.0.0.0:68
0.0.0.0:49625
0.0.0.0:5353
:::48727
:::5353

它返回所有打开端口的列表.. 我将如何删除 : 字符之前的所有内容?请注意有几个有 ::: 而不是 : 我只想让它返回端口,删除最后一个之前的所有文本:

我想在一个 bash 命令中完成所有操作。

提前非常感谢!

【问题讨论】:

    标签: bash sed awk grep


    【解决方案1】:

    添加到您的 sed 命令:

    ';s/.*:/:/g'
    
    netstat -tuna | awk '{ print $4; }' | sed -e '1,2d;s/.*:/:/g'
    

    应该可以。

    【讨论】:

      【解决方案2】:

      只需使用一个 awk 命令即可。无需链接太多

      netstat -tuna | awk  'NR>2{ k=split($4,a,":");print a[k] }'
      

      netstat -tuna | awk  'NR>2{ sub(/.*:/,"",$4);print $4 }'
      

      或 Ruby(1.9+)

      netstat -tuna | ruby -ane 'puts $F[3].sub(/.*:/,"") if $.>2'
      

      如果你想要独特的端口,

      netstat -tuna | awk  'NR>2{ sub(/.*:/,"",$4); uniq[$4] }END{ for(i in uniq) print i }'
      

      【讨论】:

        【解决方案3】:

        显然,you can tuna network, but you can't tuna fish

        下面会打印所有打开的端口

        netstat -tuna | awk -F':+| +' 'NR>2{print $5}'
        

        以下将打印所有唯一打开的端口,即没有重复的按升序排序

        netstat -tuna | awk -F':+| +' 'NR>2{print $5}' | sort -nu
        

        【讨论】:

          猜你喜欢
          • 2022-09-22
          • 1970-01-01
          • 1970-01-01
          • 2011-08-07
          • 2022-11-07
          • 2021-10-19
          • 1970-01-01
          • 2021-03-05
          • 1970-01-01
          相关资源
          最近更新 更多