使用批处理从文本文件中提取IP地址

时间:2012-08-26 01:19:52

标签: string batch-file trim

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

8月21日[10.23.5.5]拆解动态

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

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

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

8月21日[192.168.15.231] sendmail [18831]

我需要删除除" ["和"]"。字符串长度" ["是固定的。 "]"之后的字符串长度多变。 我尝试过使用现有解决方案之一,但无法取得成功。是否可以使用批处理? 感谢: - )

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分: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地址匹配。

答案 2 :(得分:0)

您将此标记为批处理,因此我认为这是在Windows而不是Linux。同样,我强烈建议您前往Cygwin的网站下载副本。这将使您可以访问catgrep命令,这使命令变得更加简单。安装Cygwin后,可以运行以下命令从日志文件中解析出IP地址。

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

干杯