arrays - 提取路径内容/文件名组件 (BASH)
问题描述
我有文件名,我试图从中提取名称/单词/数字以供以后使用。
例如
/.../Penguins_45_MIA.txt
/.../Sheep_3.5_KIA.txt
/.../Dolphins_19_AWOL.txt
如您所见,文件名中有下划线分隔的组件,这对我很有用。我将它们放在一个数组(“ currentpath
”)中,然后进入一个循环,一次处理每个文件(我认为这是一种非常明智的方法?)。我一直在尝试使用以下命令将路径分解为其组成单词和数字:
partialpath=(${currentpath//_/})
然后选择名称的一部分(现在是一个元素),例如使用以下内容的动物:
${partialpath[-3]}
但这不起作用 - 我一直希望上面的回声会给我一个Dolphins
或Penguins
等等。当我调查时,echo "${partialpath[@]}"
返回:
/.../Dolphins19AWOL.txt
所以我假设数组只有一个元素?也就是说,整个文件路径都粘在一起,没有任何下划线?还是我错误地选择了元素?
另外,我刚刚注意到最后一个元素仍然会使.txt
文件以最后一个元素结尾,这将是次优的。
我希望这很清楚,我知道这是一个简单的问题,但我对编写脚本完全陌生,而且我整天都在摸不着头脑。
解决方案
${currentpath//_/}
just removed the underscores, it doesn't break the string up. It can be used on arrays, but just does the same string manipulation on each element. Try this:
$: cat x
/.../Penguins_45_MIA.txt
/.../Sheep_3.5_KIA.txt
/.../Dolphins_19_AWOL.txt
while read line
do tmp="${line##*/}" # remove ALL path stuff from the line
tmp="${tmp%.*}" # remove JUST LAST piece after a dot
IFS="_" read -a chunk <<< "$tmp"; # split on underscores
printf "%10s " "${chunk[@]}"; printf "\n";
done < x
Penguins 45 MIA
Sheep 3.5 KIA
Dolphins 19 AWOL
推荐阅读
- c# - 带有 if 条件的复选框项目
- android - 在 Google Play 中部分部署应用程序
- android - (R.layout.activity_main)?R 为红色
- regex - 选择 2 个单词之间的一组数字
- javascript - 如何在节点 js 中使用从数据库中选择的异步和等待
- latex - tabularx \linewidth 改装不起作用
- java - 如何从登录按钮前进到下一个代理信息表?
- bash - 我不知道如何从 Haxe 调用 bash 命令
- python - 如何在多线程/多处理时将 TensorFlow 张量转换为 tf.Dataset.map() 中的 NumPy 数组?
- mysql - 将数据从一个 ID“传输”到另一个 ID,然后从同一个表中删除第一个 ID 的更好方法?