在使用shell脚本拆分文件名和文件夹路径方面需要帮助

5 unix shell awk

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

示例文件路径:

/EBF/DirectiveFiles/data_report_PD_import_script_ABF1_6 
Run Code Online (Sandbox Code Playgroud)

需要输出:

Folder path: /EBF/DirectiveFiles/ 
Filename: data_report_PD_import_script 
Run Code Online (Sandbox Code Playgroud)

use*_*001 14

因此,Linux有特殊的实用程序,basename并且dirname:

$ 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
Run Code Online (Sandbox Code Playgroud)


Ed *_*ton 5

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
Run Code Online (Sandbox Code Playgroud)

或者使用GNU awk(对于gensub()),如果您愿意:

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