需要使用Shell脚本从文件路径中删除最后3个字

需要使用Shell脚本从文件路径中删除最后3个字,shell,Shell,我不熟悉Shell脚本。我想从包含文件扩展名的文件路径中删除最后3个单词。下面是一个例子 输入: /tmp/errorlog_invest_CR12345_88_1:05:45.txt 期望输出: /tmp/errorlog_invest 请帮助我获得所需的输出。谢谢 您将在此URL上找到以下解决方案 我无法添加评论,因此只能复制粘贴Ans 如果要删除一定数量的路径组件,应使用带-d'/'的cut。例如,如果path=/home/dude/some/deepish/dir: 要删除前两个组

我不熟悉Shell脚本。我想从包含文件扩展名的文件路径中删除最后3个单词。下面是一个例子

输入:

/tmp/errorlog_invest_CR12345_88_1:05:45.txt
期望输出:

/tmp/errorlog_invest
请帮助我获得所需的输出。谢谢

您将在此URL上找到以下解决方案 我无法添加评论,因此只能复制粘贴Ans

如果要删除一定数量的路径组件,应使用带-d'/'的cut。例如,如果path=/home/dude/some/deepish/dir:

要删除前两个组件,请执行以下操作:

$echo$path | cut-d'/'-f4- some/deepish/dir

要删除最后三个组件(假定没有尾随斜杠):

$echo$path | cut-d'/'-f-3 /老家/老兄

要保留最后三个组件(rev反转字符串):

$echo$path | rev | cut-d'/'-f-3 | rev some/deepish/dir

或者,如果您想删除特定组件之前的所有内容,sed将起作用:

$echo$path | sed's/*(部分)/\1/g' some/deepish/dir

或在特定组件之后:

$echo$path | sed's/(都德)。*/\1/g' /老家/老兄

如果不想保留指定的组件,则更容易:

$echo$path | sed's/some.*//g' /老家/老兄/

如果要保持一致,也可以匹配尾部斜杠:

$echo$path | sed's//some.//g' /老家/老兄

当然,如果要匹配多个斜杠,则应切换sed分隔符:

$echo$path | sed's/一些。*!!g' /老家/老兄


另外,如果你的文件名中有/个字符,那么你就完全疯了。

define“last 3 words”谢谢Rahul的回答。这真的很有帮助。