如何解决如何在很长的单行字符串中grep连字符字符串?
我是Windows专家,所以我不在这里。如果这是一个愚蠢的问题,我深表歉意,但经过六个小时的研究,反复试验和错误,我仍未获得答案。如果有职业人士可以参加比赛,那将使我度过一个星期!
这是我的字符串:
server ITW-F280 ITW-F280HQ-AV up numProc=1 numFD=5 mem=23720kB ITW-F280HQ-DHC up numProc=2 numFD=16 mem=47040kB ITW-F280HQ-NGF up numProc=1 numFD=4 mem=117424kB ITW-F280HQ-VPN up numProc=11 numFD=118 mem=2880536kB
我希望grep的上述字符串中的字符串为ITW-F280HQ-AV
。对于上下文,此值根据在其上执行命令的防火墙而变化,但是一个共同点是HQ-AV
尾部-之前的一切都因环境而异。在此示例中,有两个连字符,但是其他防火墙可能只有一个公共连字符。
这是我到目前为止尝试过的,但无济于事...
不返回任何内容:
grep '\b\W[[:space:]]*HQ-AV[[:space:]]'
返回未过滤的整个字符串:
grep '\b\W[[:space:]]*AV[[:space:]]'
返回未过滤的整个字符串:
grep '[[:space:]]*AV\b'
仅返回-F280HQ-AV
,因此从理论上讲,这仅适用于带有一个连字符的防火墙:
grep -o '\-\w*-AV\b
我尝试了数百种组合-在此无法列出。我已经阅读了文档,但是由于我的Linux背景薄弱,我在黑暗中射击。
任何帮助将不胜感激!! :)
解决方法
我能够通过在所需字符串之前修剪所有内容来解决此问题,仅保留以下内容:
ITW-F280HQ-AV up numProc=1 numFD=5 mem=23720kB ITW-F280HQ-DHC up numProc=2 numFD=16 mem=47040kB ITW-F280HQ-NGF up numProc=1 numFD=4 mem=117424kB ITW-F280HQ-VPN up numProc=11 numFD=118 mem=2880536kB
然后我用sed修剪了第一个空格之后的所有内容:
sed 's/\s.*$//'
希望这对某人有帮助!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。