【问题标题】:Need help in splitting filename and folder path using shell script在使用 shell 脚本拆分文件名和文件夹路径时需要帮助
【发布时间】:2013-10-20 12:19:59
【问题描述】:

我是 shell 脚本的新手。我需要将以下文件结构拆分为文件名分开和文件夹路径分开。 在文件名中,我不需要 _ABF1_6,因为它不是文件名的一部分。此外,此 _ABF1_6 从文件路径更改为路径,并且对于所有文件路径都不相同。所以这需要被视为正则表达式..以_ABF1开头。请帮忙!!

示例文件路径:

/EBF/DirectiveFiles/data_report_PD_import_script_ABF1_6 

需要输出:

Folder path: /EBF/DirectiveFiles/ 
Filename: data_report_PD_import_script 

【问题讨论】:

  • 在您发布问题并收到答案后,您究竟为什么要更改目录路径并将示例输入中的_rev1_6 更改为_ABF1_6?这对您的问题没有影响,但现在让人们更难理解答案之间的差异。

标签: shell unix awk


【解决方案1】:

出于这个原因,Linux 有特殊的实用程序,basenamedirname

$ basename /EBF/DirectiveFiles/data_report_PD_import_script_ABF1_6
data_report_PD_import_script_ABF1_6
$ dirname /EBF/DirectiveFiles/data_report_PD_import_script_ABF1_6
/EBF/DirectiveFiles

【讨论】:

  • 这是完美的。谢谢!
【解决方案2】:

UNIX 没有“文件夹”,它有“目录”。

$ cat file
/ECMS/EDEV/ClassicClient/Forms/DirectiveFiles/data_report_PD_import_script_rev1_46_2_16

$ sed -r 's/(.*\/)(.*)_rev1.*/Directory: \1\nFilename: \2/' file
Directory: /ECMS/EDEV/ClassicClient/Forms/DirectiveFiles/
Filename: data_report_PD_import_script

如果您愿意,也可以使用 GNU awk(用于 gensub()):

$ gawk '{print gensub(/(.*\/)(.*)_rev1.*/,"Directory: \\1\nFilename: \\2","")}' file
Directory: /ECMS/EDEV/ClassicClient/Forms/DirectiveFiles/
Filename: data_report_PD_import_script

【讨论】:

    【解决方案3】:

    您可以为此使用 shell 参数扩展。 :

    user> p=/EBF/DirectiveFiles/data_report_PD_import_script_ABF1_6 
    user> echo ${p%/*}
    /EBF/DirectiveFiles
    user> f=${p##/}
    user> echo ${f%_ABF1}
    data_report_PD_import_script
    

    [这里][1] 是指向 bash 文档的链接。

    或者使用read 和 GNU sed(不像上面那样可移植):

    read dir file < <(sed -r 's:(.*)/(.*)_ABF1.*:"\1" "\2":' <<<"$p")
    echo $dir $file
    

    输出:

    "/EBF/DirectiveFiles" "data_report_PD_import_script"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-09
      • 1970-01-01
      • 2012-12-09
      • 2018-12-02
      • 1970-01-01
      • 1970-01-01
      • 2015-11-02
      • 1970-01-01
      相关资源
      最近更新 更多