如何从文本文件提取GST编号并追加到文件名(Bash实现)
批量提取GST编号并重命名文件的Bash方案
单行脚本实现
直接用for循环结合你已验证的awk命令,就能完成批量操作:
for file in *.txt; do gst=$(awk '/GST: / {print $NF}' "$file"); mv "$file" "${file%.txt}_${gst}.txt"; done
细节说明
- 遍历当前目录下所有
.txt文件,如果需要严格匹配yymmdd_nnnnnnnnnn.txt格式,可先开启Bash扩展匹配:shopt -s extglob,然后把*.txt换成[0-9]{6}_[0-9]{10}.txt ${file%.txt}是Bash参数扩展语法,用于移除文件名末尾的.txt后缀,方便拼接新的文件名- 你之前用
awk '/\d+$/'报错是因为**awk不支持\d作为数字匹配符**,要换成[0-9]或者[[:digit:]]才有效
处理子目录的扩展方案
如果需要递归处理子目录里的文件,用find命令配合:
find . -type f -name "*.txt" -exec bash -c ' file="$1" gst=$(awk '\''/GST: / {print $NF}'\'' "$file") mv "$file" "${file%.txt}_${gst}.txt" ' _ {} \;
内容的提问来源于stack exchange,提问作者TrisquelWhare
相关产品推荐
相关产品推荐

