我需要获取浏览器版本,后面跟我的日志文件中的浏览器名称和/。实施例
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
此外,我需要使用内部命令,同时执行如下循环
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
谢谢你。
答案 0 :(得分:1)
你的sed版本出了什么问题,在Firefox之前是一个大括号。改变如下:
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(为我工作):
sed -e 's/.*Firefox\/\([^\s]*\)/\1/g' your_file
in perl:
perl -F -ane 'foreach (@F){if(/Firefox/){$_=~s/Firefox\///g;print $_}}' your_file
答案 1 :(得分:1)
对您的sed尝试进行小幅修正:
$ sed 's|.*Firefox/\([^ ,]*\).*|\1|' file
17.0.5.7
答案 2 :(得分:1)
由于它是该行中的最后一个字段,您可以这样做:
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