Linux Bash 脚本使用已知分隔符解析未知输出

Linux Bash 脚本使用已知分隔符解析未知输出

我正在编写一个 recon shell 脚本,我想解析 odat sidguesser 的输出,这样我就可以只将找到的 SID 保存到文件或变量中。例如。我有绳子;

[+] SIDs found on the 10.10.10.82:1521 server: XE,XEXDB

我想做的是解析此输出,以便仅保留 XE,XEXDB,以便我可以将其存储在文件或变量中,以进一步枚举/使用 SID 运行 odat 密码猜测器。我如何使用 sed 或 awk 或 grep 等...来获取所有有效的 SID,而不知道会找到多少个?我可以通过以下方式获取 SID:

cat oracle-sid.txt | grep "server:" | rev | cut -d " " -f 1 | rev

这对我的目的很有用,因为 XE、XEXDB 都被认为是 1 个字符串,我可以编写更多逻辑来循环它等等...但是,在 SID 由空格分隔的情况下,如何解析每个 SID或者单词/分隔符之后的字符串“server:”?

答案1

$ sed -n -e 's/^.*server: //p' oracle-sid.txt
XE,XEXDB

在匹配的行上,sed脚本删除从行开头到“server:”的所有内容(包括尾部空格),然后打印修改后的行。不匹配的行将被忽略(即不打印)。

如果您还想保留 IP 地址和端口:

$ sed -e -e 's/^.* \([0-9.:]\+\) server: /\1\t/p' oracle-sid.txt
10.10.10.82:1521        XE,XEXDB

这将与第一个版本执行相同的操作,但包括 IP:端口和制表符。

相关内容