我正在尝试解析一个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
返回包含\
的整行,我需要知道其间,而不是整行。
为了更加困难,我需要匹配所有目录子路径,而不仅仅是一条特定的路线,因为这是针对多个站点的。
答案 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