1

我需要在我的日志文件中获取浏览器版本,然后是浏览器名称和 /。例子

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

在这里,我想提取 Firefox ie (17.0.5.7) 之后的版本。我尝试了以下方法,但没有成功。当我使用 AIX 时,我无法使用 -O 标志。

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

我还需要在while循环中使用命令,如下所示

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

提前致谢。

4

3 回答 3

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

在 perl 中:

perl -F -ane 'foreach (@F){if(/Firefox/){$_=~s/Firefox\///g;print $_}}' your_file
于 2012-12-12T11:26:47.457 回答
1

对您的 sed 尝试的小修正:

$ sed 's|.*Firefox/\([^ ,]*\).*|\1|' file
17.0.5.7
于 2012-12-12T11:32:47.127 回答
1

由于它是该行中的最后一个字段,您可以执行以下操作:

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

它打印检查它是否是“Firefox”的行并打印随后的版本。


只需执行 echo online并获取版本。

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
于 2012-12-12T11:37:02.020 回答