我的情况:
在内部平台上,IP 列表显示如下:
8.8.8.8
1.0.0.1
1.1.1.1
192.168.1.1
192.168.0.1
当我复制这些值并将它们粘贴到文本文件中时,它们都会被粘贴,例如:
8.8.8.81.0.0.11.1.1192.168.1.1192.168.0.1
因此实际上所有内容都粘贴在一行中且没有空格。
当列表有时有数千个条目时,每天用 IP 复制 IP 是一场灾难。
我完全不知道如何解决这个问题。我尝试检查元素,但每个 IP 都在其自己的<span>
元素中,并且每个跨度都有其自己的 ID 和类,因此无法批量替换为空。
我需要的:每个复制的 IP 都应粘贴在新行上。
我使用的操作系统:Ubuntu。
我的 Shell:ZSH
我愿意接受任何解决方案。
答案1
你在 Ubuntu 客户端上安装了 pdftotext 吗?
如果没有,那么从
sudo apt install poppler-utils
然后将网页打印为 pdf 文件
到 ~/Downloads/X.pdf 等位置
接下来借助较少的
您可以查看保留其物理布局的 PDF 文件的文本转换:
less ~/Downloads/X.pdf
并向下滚动到 IP 地址报告发生的位置。
尝试将列表复制/粘贴到另一个文件。如果这样可以生成无乱码格式,那么您很幸运。
然后可以使用以下方式将其变成自动化:
pdf转文本命令也与 poppler-utils 和一些 grep 和 sed 命令一起安装。
pdftotext -layout X.pdf X.txt
grep "\." X.txt | sed "s/[[:space:]]/\n/g" | grep [0-9].[0-9].[0-9].[0-9]
你应该得到如下结果
8.8.8.8
1.0.0.1
1.1.1.1
192.168.1.1
192.168.0.1
8.8.8.81.0.0.11.1.1192.168.1.1192.168.0.1
我的 X.pdf 文件是此网页的直接打印 PDF。接下来,我运行了上述命令,其中甚至包括您不想看到的运行输出。
如果您需要清理输出,请执行额外的过滤,但这应该会对您有很大帮助。
答案2
但每个 IP 都有自己的元素,每个跨度都有自己的 ID 和类
这表明你的文本在 html 文件中。尝试使用 html 查询程序htmlq.然后您可以轻松提取所需的任何内容。
要获取所有跨度,然后仅过滤掉 IP 地址,应该可以执行以下操作:
htmlq -s '\n' -f yourfile.html 'span' |
sed -e 's/^<span[^>]*>//' -e 's/<.*//' ) |
egrep '([0-9]+\.){3}[0-9]+'
如果您需要唯一的 IP ,您可以添加| sort -u
,并且原始文件中的出现顺序无关紧要。
请注意,此命令将捕获任何范围内看起来像 IP 的所有内容。这可能超出您的预期,您可能需要优化 htmlq 查询。由于您没有粘贴任何示例文件内容,我只能要求所有范围。但希望您能找到一个更具体的选择器,只捕获您想要的范围。