我正在尝试创建一个脚本,该脚本将进入一个目录并运行我自己的应用程序,每个文件都匹配一个正则表达式,特别是Test[0-9]*.txt
。
我的输入文件名看起来像这个TestXX.txt
。现在,我可以使用剪切和切断Test
和.txt
,但如果XX
未预定义为两位数,我该如何做?如果我有Test1.txt
,...,Test10.txt
,我该怎么办?换句话说,我如何获得[0-9]*
部分?
您知道,我希望能够制作OutputXX.txt
:)
编辑:
我的文件名为Test[0-9]*.txt
,我想将字符串操作为Output[0-9]*.txt
答案 0 :(得分:2)
这样的事情有帮助吗?
#!/bin/bash
for f in Test*.txt ;
do
process < $f > ${f/Test/Output}
done
答案 1 :(得分:2)
关于bash中正则表达式的一个很好的教程是here。总而言之,您需要以下内容:
if [[$filenamein =~ "^Test([0-9]*).txt$"]]; then
filenameout = "Output${BASH_REMATCH[1]}.txt"
等等。关键是,当您执行=~" regex-match, the "sub-matches" to parentheses-enclosed groups in the RE are set in the entries of array
BASH_REMATCH (the
[0] entry is the whole match,
1`第一个括号括起的组等时。)
答案 2 :(得分:1)
您需要在要保留的部分周围使用圆括号。
即。 “测试([0-9] *)。TXT”
替换这些括号内组的语法因程序而异,但您可能会发现可以使用\ 1,类似这样的内容:
S /测试(0-9 *)。TXT /输出\的1.txt /
如果您使用的是unix shell,那么'sed'可能是您进行转换的最佳选择。
http://www.grymoire.com/Unix/Sed.html#uh-4
希望有所帮助
答案 3 :(得分:0)
for file in Test[0-9]*.txt;
do
num=${file//[^0-9]/}
process $file > "Output${num}.txt"
done