2013-12-19 34 views
0

模式我有了像每行日誌條目的文件:使用SED來分隔流

request country_US url=http://example.com/us/id=6546456 {response_time 1000 msec} 
request country_UK url=http://example.com/uk/id=1242423 {response_time 60 msec} 

現在我使用sed來處理這個文件並單獨響應時間,像這樣:

sed -e 's/.*\(response_time \S\+\).*/\1/p' -e 's/' 

這將每個行

response_time 1000 
response_time 60 

現在我想也分開國字頭和G et處理過的行如下:

US 1000 
UK 60 

我該如何修改我的sed命令? 謝謝!

回答

1

另一種可能是在你的原始版本SENCE幾乎是:

sed -e 's/.*country_\(\S\+\).*response_time\(\S\+\).*/\1\2/' file 
US 1000 
UK 60 

對於未來,我只能建議http://vimregex.com/。我總是發現它非常有用。

2

試試這個:

sed -e 's/^request country_\([^ ]*\).*response_time \([0-9]*\) msec.*$/\1 \2/g' 
2

您可以修改您的sed表達一點得到期望的結果。他說:

sed -r 's/.*country_(\S+).*response_time ([0-9]+).*/\1 \2/' filename 

將返回以下爲您的樣品輸入:

US 1000 
UK 60 
2

使用awk

awk '/response_time/ {split($2,a,"_");print a[2],$(NF-1)}' file 
US 1000 
UK 60 

如果所有的線確實有response_time你可以這樣做:

awk '{split($2,a,"_");print a[2],$(NF-1)}' file 

或者只是:

awk -F" |_" '{print $3,$7}' file 
US 1000 
UK 60