【问题标题】:Need to remove the last 3 words from a file path using Shell scripting [duplicate]需要使用 Shell 脚本从文件路径中删除最后 3 个单词 [重复]
【发布时间】:2016-04-13 01:19:51
【问题描述】:

我是 Shell 脚本的新手。我想从包括文件扩展名的文件路径中删除最后 3 个单词。下面是例子,

输入:

/tmp/errorlog_invest_CR12345_88_1:05:45.txt

期望的输出:

/tmp/errorlog_invest

请帮助我获得所需的输出。谢谢!

【问题讨论】:

  • 定义“最后 3 个单词”

标签: shell


【解决方案1】:

You need to look at this URL

您将在此 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' /家/老兄

另外,如果你的文件名中包含 / 字符,那你就完蛋了。

【讨论】:

  • 感谢拉胡尔的回答。这真的很有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-12
  • 2014-12-11
相关资源
最近更新 更多