2011-10-18 53 views
0

我想解析通過一個application.log,有許多行遵循下面相同的語法。從日誌文件提取目錄與sed

"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\和下\之間是什麼上市

例如在這種情況下,將pj7fe4

我認爲下面的命令將工作..

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

不幸的是,從進一步閱讀現在我明白,這將返回包含c:\websites通過\整條生產線,我需要要知道之間,而不是整條線。

更困難的是我需要匹配所有的目錄子路徑,而不僅僅是一個特定的行,因爲這是多個站點。

回答

1

您正在使用範圍模式不正確。你不能用它來限制命令(在這種情況下打印)到行的一部分,僅限於一系列行。你也不會逃避後退。

試試這個:sed 's/.*c:\\websites\\\([0-9a-zA-Z]*\)\\.*/\1/'

有一個很好的sed教程這裏:Sed - An Introduction and Tutorial by Bruce Barnett

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