regex - 在文件名中插入字符

标签 regex unix grep

我有一个目录,其中包含一堆标题为(例如)的文件

how it is:            how it should be:
945TITLE-1.txt        945TITLE-00.txt
945TITLE-10.txt       945TITLE-01.txt
945TITLE-2.txt        945TITLE-02.txt
945TITLE-23.txt       945TITLE-03.txt
945TITLE-3.txt        945TITLE-10.txt
945TITLE.txt          945TITLE-23.txt

破折号字符后面的数字和文本可以更改,因此它需要是可变的。 忽略未编号的文件(本例中为 945TITLE.txt) 我使用以下行来获取所有以破折号和单个数字结尾的文件

file=`ls -1 working/pages/files | grep [-][0-9].txt`

但是现在我不知道如何在破折号和数字之间拼接 0。

for file in $filelist
do  
????
done

经过多次尝试,我取得了最大的成就:

for file in working/pages/files/$filelist
do  
f1=${filelist%%[-]*}
f2=${filelist##*[-]}
finalName=${f1}-0${f2}
echo $finalName
mv $file working/pages/files/$finalName
done

每次$finalName的输出都是945TITLE-03.txt,并且它仅将mv命令应用于945TITLE- 1.txt(错误地将其更改为945TITLE-03.txt)并说它找不到其他文件(因为它只查找working/pages/files/ 第一个文件的文件夹)

任何帮助将不胜感激,我绝不接受这个解决方案,所以如果您能想到一个更优雅的解决方案,但与我提议的不同,我会非常高兴听到它。谢谢

最佳答案

这是我根据您开始的内容制作的一个简单示例。有一些有趣的特殊外壳可以处理您的 945TITLE.txt 情况:

#!/bin/bash

for file in 945*
do
    suffix=${file##*[.]}
    base=$(basename ${file} .${suffix})
    prefix=${base%%[-]*}
    number=${base##*[-]}
    case ${number} in
        ''|*[!0-9]*) number=0 ;;
    esac
    echo ${prefix}-$(printf "%02d" ${number}).${suffix}
done

关于regex - 在文件名中插入字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14611944/

相关文章:

linux - 取消设置参数变量

linux - Shell 脚本自动回答 Yes No 对话框

c - APUE<2nd> 11.4,先发信号或先解锁

regex - sed 版本提取

php - 将本地电话号码格式化为国际(已知国家)

javascript - 新的正则表达式。测试

javascript - 从 JavaScript INLINE 中去除非数字或小数

java - 将正则表达式应用于 str.split 方法时出现异常

macos - 适用于 Mac 的强大搜索替换 GUI 应用程序?

Clojure : 'lein repl' history grepping?