【发布时间】:2016-04-13 01:19:51
【问题描述】:
我是 Shell 脚本的新手。我想从包括文件扩展名的文件路径中删除最后 3 个单词。下面是例子,
输入:
/tmp/errorlog_invest_CR12345_88_1:05:45.txt
期望的输出:
/tmp/errorlog_invest
请帮助我获得所需的输出。谢谢!
【问题讨论】:
-
定义“最后 3 个单词”
标签: shell
我是 Shell 脚本的新手。我想从包括文件扩展名的文件路径中删除最后 3 个单词。下面是例子,
输入:
/tmp/errorlog_invest_CR12345_88_1:05:45.txt
期望的输出:
/tmp/errorlog_invest
请帮助我获得所需的输出。谢谢!
【问题讨论】:
标签: shell
您将在此 URL 上找到以下解决方案 我无法添加评论,所以我只是复制粘贴 Ans
如果您想删除一定数量的路径组件,您应该使用带有 -d'/' 的 cut。例如,如果 path=/home/dude/some/deepish/dir:
删除前两个组件:
$ 回声 $path |剪切 -d'/' -f4- 一些/深/目录
要删除最后三个组件(假设没有尾部斜杠):
$ 回声 $path |剪切 -d'/' -f-3 /家/老兄
要保留最后三个组件(rev 反转字符串):
$ 回声 $path |转 |剪切-d'/' -f-3 |转 一些/深/目录
或者,如果您想删除特定组件之前的所有内容,sed 可以:
$ 回声 $path | sed 's/.*(一些)/\1/g' 一些/深/目录
或在特定组件之后:
$ 回声 $path | sed 's/(老兄).*/\1/g' /家/老兄
如果您不想保留指定的组件,那就更容易了:
$ 回声 $path | sed 's/some.*//g' /家/老兄/
如果你想保持一致,你也可以匹配尾部斜杠:
$ 回声 $path | sed 's//一些。*//g' /家/老兄
当然,如果你匹配多个斜线,你应该切换 sed 分隔符:
$ 回声 $path | sed 's!/some.*!!g' /家/老兄
另外,如果你的文件名中包含 / 字符,那你就完蛋了。
【讨论】: