0

我有一个包含如下数据的文本文件:

8 月 21 日 [10.23.5.5] 拆解动态

8 月 18 日 [10.150.1.45] 8 月 21 日 15:28:34

2012 年 8 月 24 日 [10.96.5.10] 2012 年 8 月 21 日 18:58:26

2012 年 8 月 24 日 [10.96.5.10] 2012 年 8 月 22 日 18:58:26

8 月 21 日 [192.168.15.231] 发送邮件[18831]

我需要删除除“[”和“]”包围的 IP 地址之外的所有内容。“[”之前的字符串长度是固定的。“]”之后的字符串长度不同。我尝试在这里使用现有解决方案之一,但未能成功。是否可以使用批处理来完成?谢谢:-)

4

3 回答 3

2

直接从命令行:for /f "tokens=2 delims=[]" %F in (file.txt) do echo %F. 根据需要重定向。不如 sed/awk 和正则表达式灵活,但它不需要外部工具。

但是,如果您打算将更复杂的东西放在一起,我真的会寻找更强大的工具——除了已经提到的 awk 或 Perl,Win 上的自然选择是 Powershell。

于 2012-08-26T10:30:35.873 回答
1

安装一个版本,sed如果它还没有在你的系统上。

$ sed -r -e 's/^[^[]*\[([^]\]*)].*/\1/' file.txt
10.23.5.5
10.150.1.45
10.96.5.10
10.96.5.10
192.168.15.231

这个 sed 单行“脚本”在从行中删除所有内容后输出每个输入行,但该行的第一 组 [] 方括号内的内容除外 - 它不会检查这些内容以确保它与 IP 地址匹配。

于 2012-08-26T02:22:35.087 回答
0

您将此标记为批处理,所以我假设这是在 Windows 上而不是 linux 上。尽管如此,我强烈建议您访问Cygwin的网站并下载一份副本。这将使您可以访问catgrep命令,这使这变得更加简单。安装Cygwin后,您可以运行以下命令从日志文件中解析出 IP 地址。

cat your.log | grep -oE '([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}' > ips.txt

干杯

于 2012-08-26T02:08:51.137 回答