我是shell脚本方面的新手。我需要将以下文件结构拆分为文件名分离和文件夹路径分离。在文件名中,我不需要_ABF1_6,因为它不是文件名的一部分。此外,此_ABF1_6从文件路径更改到路径,并且对所有文件都不是相同的。因此,这需要被认为是带有_ABF1的常规_ABF1。救命啊!!
示例文件路径:
/EBF/DirectiveFiles/data_report_PD_import_script_ABF1_6 需要输出:
Folder path: /EBF/DirectiveFiles/
Filename: data_report_PD_import_script 发布于 2013-10-20 18:15:23
由于这个原因,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发布于 2013-10-20 12:42:51
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发布于 2013-10-20 13:44:29
为此,可以使用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这里有一个指向bash文档的链接。
或者使用read和GNU (不像上面那样可移植):
read dir file < <(sed -r 's:(.*)/(.*)_ABF1.*:"\1" "\2":' <<<"$p")
echo $dir $file输出:
"/EBF/DirectiveFiles" "data_report_PD_import_script"https://stackoverflow.com/questions/19477236
复制相似问题