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

また、以下のように while do loop 内でコマンドを使用する必要があります

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

これは行の最後のフィールドであるため、次のことができます。

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 に答える
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 -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 に答える