【问题标题】:Extract Information From File Name in Bash [duplicate]从 Bash 中的文件名中提取信息 [重复]
【发布时间】:2015-07-04 07:56:33
【问题描述】:

假设我有一个名为 ABC_DE_FGHI_10_JK_LMN.csv 的文件。我想借助 ID 位置和文件名分隔符从文件名中提取 ID,即 10。我有以下两个输入

File-name_ID_Position=4; [since 10 is at fourth position in file-name]
File-name_Delimiter="_";

这里的 ID 可以是数字或字母数字。那么如何借助上述两个输入从上述文件中提取 10。如何在 bash 中实现这一点?

【问题讨论】:

  • 只有 Bash 还是 awk 可用?
  • 如果它返回所需的输出并兼容在shell脚本中使用,对我来说就可以了。
  • x="ABC_DE_FGHI_10_JK_LMN.csv"; x=${x#*_*_*_}; echo ${x%_*_*}
  • @Cyrus,PRATIK PATIL 更改了文件命名约定,以及为什么我删除了我的答案,所以x="ABC_DE_FGHI_10.csv"; x=${x#*_*_*_}; echo ${x%_*_*} 返回10.csv 而不仅仅是他想要的10。但是,将此标记为重复,我想这并不重要。
  • 使用_. 作为分隔符:x="ABC_DE_FGHI_10.csv"; x=${x#*[_.]*[_.]*[_.]}; echo ${x%[_.]*}

标签: bash shell unix awk


【解决方案1】:

我不会在 bash 中编写正则表达式,而是使用 awk:

echo 'ABC_DE_FGHI_10_JK_LMN.csv' | awk -F_ -v pos=4 '{print $pos}'

或者如果您希望点也是分隔符(需要 GNU awk):

echo 'ABC_DE_FGHI_10_JK_LMN.csv' | awk -F'[_.]' -v pos=4 '{print $pos}'

【讨论】:

  • 如果 ID 出现在文件名的最后位置怎么办?前任。回声'ABC_DE_FGHI_10.csv' | awk -F_ -v pos=4 '{print $pos}' 然后在这里返回 10.csv 而不是 10
  • @PRATIKPATIL 然后将其添加到分隔符(参见编辑)。
  • 谢谢,你是天才:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-25
  • 1970-01-01
  • 1970-01-01
  • 2012-07-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多