2012-12-12 34 views
1

我需要瀏覽器版本,然後是瀏覽器名稱和/在我的日誌文件中。例子提取字符串,以點分隔,後跟另一個字符串

Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0.5.7 

在這裏我想提取Firefox後的版本,即(17.0.5.7)。我嘗試了以下,但沒有成功。在我使用AIX時,我無法使用-O標誌。

grep -w 'Firefox\/[^ ,]\+' $line 
sed 's/^.*\(Firefox\/[^ ,]*\).*$/\1/' $line 

此外,我需要使用,而裏面的命令做環像adavance下面

while read -r line 
do 
case $line in  
*Firefox*) print "<browser Firefox>\"" command_to_be_executed $line "\"</browser>";; 
*) print "<browser>\"Unknown\"</browser>";; 
esac 
done < filename 

感謝。

回答

1

由於它是l您可以這樣做:

awk -F'[ /]' '$(NF-1)=="Firefox"{print $NF}' file.log 

它會打印檢查它是否爲「Firefox」並打印其版本的行。


只需在line上進行回顯並獲取版本。

while read -r line 
do 
case $line in  
*Firefox*) version=$(echo $line | awk -F'[ /]' '{print $NF}') 
print "<browser Firefox>\"" $version "\"</browser>";; 
*) print "<browser>\"Unknown\"</browser>";; 
esac 
done < filename 
+0

謝謝。但是我也會將此代碼用於其他瀏覽器,這可能不是最後一個字段。另外我需要在做循環的時候使用裏面的命令。請提供任何建議? – user1746666

+1

@ user1746666您可以在案例中使用awk。看我的編輯。 –

+0

非常感謝。我已經使用你的建議來適應案例中的代碼。對於不在最後一個字段的其他瀏覽器,我使用了其他答案。 – user1746666

1

什麼是錯的與你的sed的版本是一個括號之前Firefox.Just更改如下:

sed 's/^.*Firefox\/\([^ ,]*\).*$/\1/' your_file 

上面應該工作。 其它方法有:

awk '{for(i=1;i<=NF;i++)if($i~/Firefox/){split($i,a,"/");print a[2]}}' file_name 

也是在sed(爲我工作):

在Perl
sed -e 's/.*Firefox\/\([^\s]*\)/\1/g' your_file 

perl -F -ane 'foreach (@F){if(/Firefox/){$_=~s/Firefox\///g;print $_}}' your_file 
+0

謝謝。但它在循環中不起作用。這可能是因爲印刷。我已經更新了我的問題。請提供任何建議? – user1746666

+0

我利用了KingsIndian給出的建議,並在案例中使用了你的代碼。希望我能將所有的答案都標記爲正確的:-)。感謝您的及時幫助。 – user1746666

1

小幅回調到您的sed嘗試:

$ sed 's|.*Firefox/\([^ ,]*\).*|\1|' file 
17.0.5.7 
+0

謝謝。但它在循環中不起作用。這可能是因爲印刷。我已經更新了我的問題。請提供任何建議? – user1746666

+0

我利用了KingsIndian給出的建議,並在案例中使用了你的代碼。希望我能將所有的答案都標記爲正確的:-)。感謝您的及時幫助。 – user1746666

相關問題