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



我是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 

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

UNIX 没有"文件夹",它有"目录"。

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

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

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

你可以为此使用 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"

最新更新