hualnux QA 1.1:如何用命令去掉文件名只获取路径

一、需求

有一个日志文件如下:

#因涉及到他人产生环境的东西,我做了一些修改
[root@vm81 t1]# cat a.log 
/disk1/www/hua.com/js/ddrDetail.js
/disk1/www/hua.com/back/admin/index.php
/disk1/www/hua.com/new/index.php
/disk1/www/www.hualinux.com/index.php

上面的a.log日志文件中包括很多文件所在的具体路径,而且路径的目录层次深度是不一样的(有3层、4层、5层混的)

要求:去掉文件名,只保留路径,变成这样

/disk1/www/hua.com/js
/disk1/www/hua.com/back/admin
/disk1/www/hua.com/new
/disk1/www/www.hualinux.com

二、分析

2.1 分析

上面要去掉文件名,只保留路径的话,有/明显分隔,是不是可以用awk呢?但是路径长短又不一致怎么办?

再看一下,是不是有其它的规律,虽然它路径目录层次深度不一样,后缀名也不一样,但是它最后没有/啊!

PS:是不是很熟悉的感觉?

注册的时候,填写的手机号的邮箱他们是怎么判断你写错的,肯定是有一个判断规律

比如手机肯定是11位数字,邮箱肯定有一个@

这种有规律的东西,我们叫它正则表达式。grep、sed、awk都支持正则表达式

2.2 正则表达式

下面是一个正则表达式的表:

三、解决

这里我使用sed命令,处理思想是

根本观察,上面的所有文件路径都是以  最后一个”/“+文件名结束的,是没有”/“的,这就是所谓的通用规律

好,我现在就用sed去表达,使用的是sed的正则,因为有

\1 子串匹配标记

\(..\) 匹配子串,保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成lovers。

这就是我要的东西,下面是命令和效果

[root@vm81 t1]# cat a.log 
/disk1/www/hua.com/js/ddrDetail.js
/disk1/www/hua.com/back/admin/index.php
/disk1/www/hua.com/new/index.php
/disk1/www/www.hualinux.com/index.php
[root@vm81 t1]# 
[root@vm81 t1]# 
[root@vm81 t1]# sed -n 's#\(.*\)/\(.*\)#\1#p' a.log 
/disk1/www/hua.com/js
/disk1/www/hua.com/back/admin
/disk1/www/hua.com/new
/disk1/www/www.hualinux.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值