2017-08-11 38 views
-3

我试图从一行中剪出一行来格式化报告,从testssl扫描的结果中删除。我正在寻找切断线路,并采取前半部分(它看起来像它分裂在一个选项卡上)。Bash:在空白处分割一行

例子:

Secure Client-Initiated Renegotiation  not vulnerable (OK) 

我需要在我的bash脚本(的grep,sed的,AWK,等等)拉出第一部分的不仅仅是语言的一种方式。 TRICK,我猜测是testssl有很多测试,所以我需要一些东西,无论该行的第一部分被调用了什么(我不能挂在任何实际的词上,因为它们会改变)。

任何帮助将非常感激!

+0

你到目前为止尝试过什么?两组单词之间的分隔总是5个空格吗? – pchaigno

+0

我已经尝试了很多grepping。我已经设法至少将它分解成仅仅根据盒子的漏洞找到我需要的线条,但是砍到我需要的部分已经躲过了我。 下面是我用来实际得到我需要的作品: grep -v“not”FILENAME | egrep -o“。{0,42} VULNERABLE”} 这似乎至少可以从只有具有漏洞(忽略不是)到行开头的行抓取。现在我只是想消除VULNERABLE和尾随的空白。 – Balatro

+0

这里的文件怎么看起来尽可能的格式: 测试协议(通过OpenSSL的,通过套接字的SSLv2) 的SSLv2不提供(OK) 的SSLv3不提供(OK) TLS 1提供 测试漏洞 心脏出血漏洞( (CVE-2014-0160)不存在漏洞(OK),超时 CCS(CVE-2014-0224)不易受攻击(OK) 安全重新协商(CVE-2009-3555)不易受影响(OK) 安全客户端启动的重新协商VULNERABLE (不好),潜在的DoS威胁 – Balatro

回答

0

正如您所猜测的那样,您可以使用工具sedawk来实现此目的。但预计你应该以代码的形式提供一些工作来解决你的问题(可能是下次?)。反正我要带一咬牙:

使用awk

echo -e "Secure Client-Initiated Renegotiation\tnot vulnerable (OK)" | 
awk -FS"\t" '{print $1}' 

或使用sed

echo -e "Secure Client-Initiated Renegotiation\tnot vulnerable (OK)" | 
sed -E 's/^([^\t]+)\t.*$/\1/' 

注:在你的情况,你的命令替换echo

+0

非常感谢! Drat ......感叹,看起来他们可能使用了间距而不是实际的选项卡来分隔字符串中的文本。两种方法都像以前一样返回整个字符串。我会翻译语法,看看我能不能把它变成形状。 老实说,我预料这会以某种方式变成被拉进某种正则表达式的炼狱。 我仍然围绕脚本解决这些问题。我真诚地感谢回应。 – Balatro

0

我结束了使用awk。目前我与运行:

的awk -F“*”‘{打印$ 1}’

这是分裂就多了一些空间,给我的第一部分(发现实际的漏洞)。