4

タブ区切りの変更されたApacheWebアクセスログエントリからファイル名を解析しようとしています。

/common/common/img/pictos/klArrowRight.gif    /common/common/img/pictos/klArrowRight.gif   03/Dec/2012:00:00:00    127.0.0.1   03/Dec/2012:00:00:00    us   404

私はそれがこのように出てくることを望みます:

klArrowRight.gif    /common/common/img/pictos/klArrowRight.gif   03/Dec/2012:00:00:00    127.0.0.1   03/Dec/2012:00:00:00    us   404

でこのようなことを試しました:

's:。* / ::'

しかし、それはあまりにも貪欲であり、それは私のラインの残りを食べます。私は投稿を調べてきましたが、今のところ運がありません。ヒントはありますか?

4

6 に答える 6

8

指定された絶対パスからのファイル名の抽出のみが必要な場合、指定された回答はどれも完全には正しくないようです。したがって、ここで解決策を示します。変数filenameに完全なパスがあると考えてみましょう。たとえば、filename = / ABC / DEF / GHI 次に、

echo $filename | awk 'BEGIN{FS="/"}{print $NF}'

ファイル名はGHIになります。

于 2014-02-14T21:04:13.917 に答える
4

貪欲になりすぎないように指示する限り、sedだけでこれを非常に簡単に行うことができます。

% echo '/img/pictos/klArrowRight.gif 03/Dec/2012' | sed 's,^[^ ]*/,,'
klArrowRight.gif 03/Dec/2012
%

(つまり、「行の先頭から始めて、スペース以外の文字の可能な限り長いリストを見つけ、その後にスラッシュを続けます」)

于 2012-12-07T16:17:37.260 に答える
2

質問の入力/出力は適切にフォーマットされていません。これが必要ですか?

awk '{gsub(/\/.*\//,"",$1); print}' file

テスト

kent$  echo "/common/common/img/pictos/klArrowRight.gif /common/common/img/pictos/klArrowRight.gif 03/Dec/2012:00:00:00 127.0.0.1 03/Dec/2012:00:00:00 us 404"|awk '{gsub(/\/.*\//,"",$1); print}'

出力:

klArrowRight.gif /common/common/img/pictos/klArrowRight.gif 03/Dec/2012:00:00:00 127.0.0.1 03/Dec/2012:00:00:00 us 404
于 2012-12-07T15:54:31.553 に答える
2

perl regexpとbasenameを使用する(sed / awkに固執しているとは思わない):

perl -p -e 'use File::Basename;s/([^\s]+\s+)[^\s]+\s+/$1/;print basename($1)'

例:

echo "/common/common/img/pictos/klArrowRight.gif /common/common/img/pictos/klArrowRight.gif 03/Dec/2012:00:00:00 127.0.0.1 03/Dec/2012:00:00:00 us 404" |
   perl -p -e 'use File::Basename;s/([^\s]+\s+)[^\s]+\s+/$1/;print basename($1)'

klArrowRight.gif /common/common/img/pictos/klArrowRight.gif 03/Dec/2012:00:00:00 127.0.0.1 03/Dec/2012:00:00:00 us 404
于 2012-12-07T15:56:37.423 に答える
1
awk 'BEGIN{FS=OFS="\t"} {sub(/.*\//,"",$1)} 1' file
于 2012-12-07T16:01:46.817 に答える
0

使用する1つの方法GNU grep

grep -oP "[^/]*\t.*" file

結果:

klArrowRight.gif    /common/common/img/pictos/klArrowRight.gif  03/Dec/2012:00:00:00    127.0.0.1   03/Dec/2012:00:00:00    us  404
于 2012-12-08T12:05:40.213 に答える