使用sed从日志文件中提取目录

时间:2011-10-18 17:25:00

标签: linux sed grep

我正在尝试解析一个application.log,它有许多行,遵循以下相同的语法。

"Error","jrpp-237","10/13/11","02:55:04",,"File not found: /indexUsa~.cfm The specific sequence of files included or processed is: c:\websites\pj7fe4\indexUsa~.cfm '' "

我需要使用某种类型的命令来提取c:\websites\和下一个\之间列出的内容

e.g。在这种情况下,它将是pj7fe4

我认为以下命令可行..

bin/sed -n '/c:\\websites\\/,/\\/p' upload/test.log

不幸的是,通过进一步阅读,我现在明白,这将通过c:\websites返回包含\的整行,我需要知道其间,而不是整行。

为了更加困难,我需要匹配所有目录子路径,而不仅仅是一条特定的路线,因为这是针对多个站点的。

2 个答案:

答案 0 :(得分:1)

您正在错误地使用范围模式。您无法使用它将命令(在本例中为打印)限制为行的一部分,仅限于一系列行。你也没有逃避退格。

试试这个:sed 's/.*c:\\websites\\\([0-9a-zA-Z]*\)\\.*/\1/'

这里有一个很好的sed教程:Sed - An Introduction and Tutorial by Bruce Barnett

答案 1 :(得分:0)

grep方式:

grep -Po "(?<=c:\\\websites\\\)[^\\\]+(?=\\\)" yourFile

试验:

kent$  echo '"Error","jrpp-237","10/13/11","02:55:04",,"File not found: /indexUsa~.cfm The specific sequence of files included or processed is: c:\websites\pj7fe4\indexUsa~.cfm '' "'|grep -Po "(?<=c:\\\websites\\\)[^\\\]+(?=\\\)"
pj7fe4