我有以下形式的文件路径:
../healthy_data/F35_HC_532d.dat
我想从中摘录F35_HC_532d
。我可以从bash的该文件名中删除前缀和后缀,如下所示:
for i in ../healthy_data/*; do echo ${i#../healthy_data/}; done # REMOVES PREFIX
for i in ../healthy_data/*; do echo ${i%.dat}; done # REMOVES SUFFIX
如何合并这些内容,以便在一个命令中将其删除,仅提取我想要的部分?
如果可以使用Awk
,这很简单,
for i in ../healthy_data/*
do
stringNeeded=$(awk -F/ '{split($NF,temp,"."); print temp[1]}' <<<"$i")
printf "%s\n" "$stringNeeded"
done
在-F/
拆分输入字符串/
的字符,并$NF
表示在这种情况下字符串中的最后一个字段,F35_HC_532d.dat
现在该split()
函数被调用,去限制器.
之前提取的部分dot
。
的选项/在上述功能Awk
是POSIX
兼容的。
同样bash
不支持嵌套参数扩展,您需要按照以下两个步骤进行修改:-
tempString="${i#*/*/}"
echo "${tempString%.dat}"
在单循环中
for i in ../healthy_data/*; do tempString="${i#*/*/}"; echo "${tempString%.dat}" ; done
这里有两种折叠语法,"${i#*/*/}"
一部分只是将F35_HC_532d.dat
存入变量中tempString
,在该变量中,我们将.dat
部分删除为"${tempString%.dat}"
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句