【问题标题】:Extract left and right from filename based on last delimiter using shell script使用shell脚本根据最后一个分隔符从文件名中提取左右
【发布时间】:2021-06-24 19:42:30
【问题描述】:

我想使用 shell 脚本根据最后一个分隔符从文件名中提取左右

Ex : filename = 'test_testone_test3_1234'

I'm expecting below values
     file = 'test_testone_test3'
     seq = '1234'

有更好的方法吗?

【问题讨论】:

  • 通常,我建议使用basename 和/或dirname。但这些似乎并不真正适用于您的(不寻常的?)命名约定......
  • 请阅读 Darkman 引用的链接(如果您还没有),“赞成”他的答案(如果您还没有),查看他的示例……如果解决了,请“接受”你的问题。

标签: linux shell unix sh


【解决方案1】:

您可能想了解一下Parameter Expansion

$ filename="test_testone_test3_1234"
$ echo "${filename#*_}"
testone_test3_1234
$ echo "${filename##*_}"
1234
$ echo "${filename%_*}"
test_testone_test3
$ echo "${filename%%_*}"
test
$ echo "${filename#*_*_}"
test3_1234
$ echo "${filename%_*_*}"
test_testone

您也可以使用cut.-d 作为字段分隔符,使用-f 作为字段。

$ filename="test_testone_test3_1234"
$ echo "$filename" | cut -d_ -f1-3
test_testone_test3
$ echo "$filename" | cut -d_ -f4
1234
$ echo "$filename" | cut -d_ -f1-2
test_testone
$ echo "$filename" | cut -d_ -f3-
test3_1234

【讨论】:

  • 谢谢。我想在最后两个分隔符(test_testone)之前的左侧提取?你能帮帮我吗?
猜你喜欢
  • 2016-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-17
  • 2012-11-23
  • 1970-01-01
  • 2021-01-25
  • 2018-06-14
相关资源
最近更新 更多