所以我有这个脚本,它通过运行ifconfig
来分配给我的操作系统(GNU / Linux)的IP。它工作正常,但是,我想知道我是否可以在相同的正则表达式中过滤掉loopback / localhost IP(127.0.0.1)[我假设我的集群中的每个服务器都说IP并且我不需要做任何事情在我的剧本中使用它。]
我的脚本使用的是:
ifconfig | awk '/(([0-9]{1,3}\.){3})/ {print}' |sed -e "s/.*addr\://g" -e "s/\s.*//g"
我得到的结果如下:
> ifconfig | awk '/(([0-9]{1,3}\.){3})/ {print}' |sed -e "s/.*addr\://g" -e "s/\s.*//g"
172.16.0.1
127.0.0.1
我知道这可能是一个愚蠢的问题,但是我可以在我的第一个正则表达式中过滤掉以127开头的任何IP吗?
我可以尝试更改grek的awk,例如:
> ifconfig |egrep -o "addr\:(([0-9]{1,3}\.){3}[0-9]{1,3})" |sed -e "s/.*addr\://g"
但是如果我在开始时尝试否定(?!127),bash会将其解释为!127这会让我从历史中汲取一些东西。
我的意思是,我可以在grep -v "127.0.0.1"
之类的oneliner的末尾运行另一个grep,但我只是想避免greping已经greped的东西。我觉得这并不是什么问题,只是想要了解更多,更有效率。
答案 0 :(得分:1)
您只需添加一个与127.0.0.1
匹配的子句,然后通过添加next
将其排除,如下所示。这样Awk
忽略对包含此模式的行执行任何操作。
.. | awk '/127.0.0.1/{next}/(([0-9]{1,3}\.){3})/{print}' | ..
答案 1 :(得分:1)
只有一个没有sed或awk的grep:
['NTE_BAD_PROV_TYPE',
'',
'Invalid provider type specified.',
'More data is avaiable on bla bla.',
'0x80090014']