对于我最初的问题,我收到了几个很好的答案,并选择使用 @Giles Quenot 提供的 bash 解决方案,该解决方案是
#!/bin/bash
str=$(<file)
for i in $str; do
if [[ $i =~ ^[A-F][A-Z][0-1] ]]; then
echo "${i:0:2}/$i.jpg"
fi
done
它转换包含的文本文件
AF002
AI003
AA001
AD005
AD006
AI002
进入
AF/AF002.jpg
AI/AI003.jpg
AA/AA001.jpg
AD/AD005.jpg
AD/AD006.jpg
AI/AI002.jpg
然而,我创建了一个名为 bash 脚本AddPath.sh
,并且有两个完全与新手相关的问题:
我无法调整上述命令来操作脚本名称后“1”位置的文件;即我想写,
AddPath.sh TrialList.txt > TargetFile.txt
因为我可能不得不使用这个脚本数十次,每次都作用于不同的文件。请帮助我克服我的无知。事实证明,我必须为其创建文件路径的大多数文件都位于 SanDisk 拇指驱动器上,通常称为
NO NAME
.没有汗水,我想。我只是将推荐脚本中的 echo 行添加修改为echo "NO NAME/${i:0:2}/$i.jpg"
.第一次尝试似乎可行,但在后续运行中,它会插入一个额外的回车符(也许是换行符?),以便我在 iMac 上获得输出:NO NAME/AF/AF002 .jpg NO NAME/AI/AI003 .jpg NO NAME/AA/AA001 .jpg NO NAME/AD/AD005 .jpg NO NAME/AD/AD006 .jpg NO NAME/AI/AI002 .jpg
再说一次,很可能完全是新手的愚蠢。请帮忙。
答案1
呜呼!其实我自己解决了一个问题!
问题 (2) 是 $i 变量由于某种原因在原始列表的行末尾包含回车符。目前还不清楚为什么脚本现在这样做,而以前没有这样做,但就这样吧。我echo "NO NAME/${i:0:2}/$i.jpg"
通过替换 解决了这个问题
echo "NO NAME/${i:0:2}/${i:0:5}.jpg"
。这可以防止在行尾复制回车符。