awk 替换--有什么语法

xinshirn 2013-03-12 06:08:03
我有这个需求,需要截取一个字符串(表示一段路径)的一段,比如下面的这个字符串:
/dir1/dir2/../dirN/good/better/best/dir_last1/dir_last2/...

我希望截取的结果是
/dir1/dir2/../dirN

其中N未知,也就是说我的源串是不固定的。但是其中一定有一个good/better/best子串,后面的还有不固定的路径。

本人之前没怎么用这个awk,研究了一下,实在搞不定。
我尝试写出来了一个半成品:

cat file | awk '{sub(/\/good\/better\/best\/dir_last1\/dir_last2\/dir_last3/,""); print}'

这个能将固定子串及后面的固定路径一起去掉(如果能匹配)
问题是,固定子串后面的子串是未知,是可能变化的,所以这个不管用。
这个awk实在不熟。高手给指点一下吧,多谢了。
...全文
81 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
woaishuo2011 2013-03-13
  • 打赏
  • 举报
回复
楼上正解!!!
ljc007 2013-03-13
  • 打赏
  • 举报
回复
echo /dir1/dir2/../dirN/good/better/best/dir_last1/dir_last2/... | awk 'gsub(/\/good\/better\/best\/.*/,"")'
xinshirn 2013-03-13
  • 打赏
  • 举报
回复
管用,多谢!
xinshirn 2013-03-12
  • 打赏
  • 举报
回复
/dir1/dir2/../dirN 其中N未知 这句话的意思是文件夹的名字以及文件夹个数都不固定。 总之一点规律也没有。除了以绝对路径/开头之外

23,114

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧