使用sed或awk过滤特定模式?

时间:2018-04-27 09:15:59

标签: bash awk sed

我有一个格式为1000个IP地址的文件,在4个八位字节是我需要过滤的源端口之后。我对bash脚本有点新,所以努力grep过滤端口号的IP地址。有关如何使用sedawk过滤端口号的任何建议都将非常感激。

192.168.100.1.111  
192.168.200.10.111  
192.168.200.128.501  
192.168.150.5.300  

输出所需

192.168.100.1

4 个答案:

答案 0 :(得分:0)

您可以使用以下命令执行此操作: -

sed 's/\.[^.]*$//' your_ip_address.txt > filtered_ip_address.txt

它将删除最后一个点以及后面的字符串。

例如: -

 echo 192.168.100.1.111 | sed 's/\.[^.]*$//'

将输出: -

 192.168.100.1    

答案 1 :(得分:0)

太容易了。

awk -F'.' '{print $1"."$2"."$3"."$4}' < /tmp/ipaddresses.txt

答案 2 :(得分:0)

awk示例:

your_port=111
awk -F\. -v port=$your_port '$NF==port{$NF="";sub(/.$/, "");print}' OFS='.' file

如果您只想删除端口:

sed 's/\.[^\.]*$//' your_file

awk

awk -F\. '{$NF="";sub(/.$/, "")}1' OFS='.' your_file

为避免只有一个过程重复

awk -F\. '{$NF="";sub(/.$/, "")}!a[$0]++' OFS='.' your_file

答案 3 :(得分:0)

请记住,调用awksed正在调用新程序,而Bash已在运行。相反,您可以直接在Bash中过滤输入:

$ while read url; do echo ${url%.*}; done <<EOL
129.168.100.1.111
1291.168.200.10.111
EOL

129.168.100.1
1291.168.200.10

那是

while read url
do
  echo ${url%.*}
done < urls.txt

<强>参考

参数展开(请参阅man bash{url%.*}使用变量$url并剥离(%)与模式匹配的所有内容{{ 1}}。请注意,模式匹配与正则表达式不同。特别是模式匹配具有更简单的语法。即.*匹配文字字符..匹配任何字符串。模式匹配最常见于文件名模式,如*

${parameter%word}
${parameter%%word}
       Remove matching suffix pattern.  The word is expanded to produce
       a pattern just as in pathname expansion.  If the pattern matches
       a  trailing portion of the expanded value of parameter, then the
       result of the expansion is the expanded value of parameter  with
       the  shortest  matching  pattern (the ``%'' case) or the longest
       matching pattern (the ``%%'' case) deleted.  If parameter  is  @
       or  *,  the  pattern  removal operation is applied to each posi-
       tional parameter in turn, and the  expansion  is  the  resultant
       list.   If  parameter is an array variable subscripted with @ or
       *, the pattern removal operation is applied to  each  member  of
       the array in turn, and the expansion is the resultant list.