求助:如何用Bash脚本从Windows格式路径提取文件名并生成XML<File>标签
解决Bash脚本提取Windows路径文件名并生成XML标签的问题
我来帮你调整脚本,完美实现你想要的功能~首先梳理下你原有脚本里可以优化的点:split命令是多余的,循环里的标签格式也写错了,另外我们可以用更高效的方式处理,不用生成中间文件。
方法一:用Bash原生参数扩展(推荐,更高效)
这个方法不需要调用外部命令(比如rev、cut),直接用Bash的参数扩展提取文件名,适合处理大量行的场景:
#!/bin/bash # 先清空目标XML文件(如果需要覆盖旧内容的话) > output.xml while IFS= read -r line; do # 用参数扩展提取最后一个反斜杠后的文件名 # ${line##*\\} 表示从字符串开头删除最长的匹配"*\\"的部分 filename="${line##*\\}" # 写入XML标签到文件 echo "<File>$filename</File>" >> output.xml done < tmp
方法二:改进你原来的管道方式
如果你更习惯用管道+文本处理命令,也可以简化原有脚本,去掉多余的split和中间文件:
#!/bin/bash # 直接通过管道处理每行,生成标签并写入XML cat tmp | rev | cut -d"\\" -f1 | rev | while IFS= read -r filename; do echo "<File>$filename</File>" >> output.xml done
方法三:用sed一步到位(最简洁)
sed可以一次性完成所有替换操作,一行命令就能搞定:
#!/bin/bash # 三个sed替换步骤: # 1. s/^.*\\// 删除最后一个反斜杠及之前的所有内容 # 2. s/^/<File>/ 在行首添加<File> # 3. s/$/<\/File>/ 在行尾添加</File> sed 's/^.*\\//; s/^/<File>/; s/$/<\/File>/' tmp > output.xml
这三种方法都能帮你把tmp里的每条Windows路径转换成<File>文件名</File>的格式,直接写入output.xml文件,完全不用手动处理上百条路径。
内容的提问来源于stack exchange,提问作者Brett Burton
相关产品推荐
相关产品推荐

