簡體   English   中英

如何使用sed或awk從路徑中提取文件名

[英]How to extract filename from path using sed or awk

我正在嘗試從已修改的apache Web訪問日志條目解析文件名:

/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

我在嘗試過類似的東西:

的:* / ::“

然而,它太貪婪了,它吃掉了我的其余部分。 我一直在瀏覽帖子,但到目前為止還沒有運氣。 任何提示?

當僅需要從給定的絕對路徑中提取文件名時,所給出的答案似乎都不完全正確。 因此我在這里給出解決方案。 讓我們考慮在變量filename中我們有完整的路徑,例如, filename = / ABC / DEF / GHI那么,

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

將導致文件名GHI

只要你告訴它不要太貪心你就可以很容易地用sed做到這一點:

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

(也就是說,“從行的開頭開始,找到最長的非空格字符列表,后跟斜杠”)

您的問題中的輸入/輸出格式不正確。 你需要這個嗎?

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

使用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
awk 'BEGIN{FS=OFS="\t"} {sub(/.*\//,"",$1)} 1' file

使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM