2016-08-09 32 views
1

日誌:正則表達式刪除所有字符串與運行開始,以:

runHalfMarathon ==>> 44 :: runFullMarathon ==>> 21 :: Name ==>> Suresh :: Age ==>> 21 :: 

正則表達式:

sed 's/run* ==>> [0-9]* //g' -i sample.log 

它不工作。我想刪除所有字符串與運行

預計產量開始:

Name ==>> Suresh :: Age ==>> 21 :: 

請幫助。

+1

它不會起作用,因爲'N *'匹配0或更多'n'符號。你一定是說'[^ =] *'。 –

回答

1

它不會工作,因爲n*匹配0或更多n符號。如果使用.*,則可以刪除太多的字符串。

我建議使用替代*[^=]*(將匹配比=其他零個或多個字符),並在末尾添加*:: *還去除::周圍空間:

sed 's/run[^=]* ==>> [0-9]* *:: *//g' 

this demo

0

您可以使用以下方法:

sed -r 's/.+?Name/Name/g' 

.+?Name尋找什麼直至幷包括名稱。然後,我們將所發現的所有東西都替換爲只有Name,這意味着我們有效地擺脫了以前的部分。

注意的選項傳遞給sed

-r use extended regular expressions in the script 

示例數據:

$ cat m 
runHalfMarathon ==>> 44 :: runFullMarathon ==>> 21 :: Name ==>> Suresh :: Age ==>> 21 :: 
runHalfMarathon ==>> 44 :: runFullMarathon ==>> 21 :: Name ==>> foo :: Age ==>> 20 :: 
runHalfMarathon ==>> 44 :: runFullMarathon ==>> 21 :: Name ==>> bar :: Age ==>> 1 :: 
runHalfMarathon ==>> 44 :: runFullMarathon ==>> 21 :: Name ==>> baz :: Age ==>> 0 :: 

輸出示例:

$ cat m | sed -r 's/.+?Name/Name/g' 
Name ==>> Suresh :: Age ==>> 21 :: 
Name ==>> foo :: Age ==>> 20 :: 
Name ==>> bar :: Age ==>> 1 :: 
Name ==>> baz :: Age ==>> 0 :: 
相關問題