文件名中的模式匹配和更改扩展名 - bash脚本

时间:2017-10-23 23:24:25

标签: bash grep pattern-matching

我想使用name-last.txt文件在以前的目录中调用另外几个名称属于文件名字符串的文件:

例如,对于Perez-Castillo.txt,我想使用:(1)Perez-Castillo.txt中的grep,(2)Perez.list中的grep和(3)Castillo.list中的grep。

我有这个部分:

    for i in *.txt; 
    do 
        wc -l $i > out1.txt
        grep -c "something" ../${i%-*}.list > out2.txt
        grep -c "something" ../${i#*-}.list > out3.txt
    done;

但是,我没有打电话,即 Castillo.list ,因为我的脚本正在调用 Castillo.txt.list

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

Bash不允许您将两个转换嵌套到单个参数扩展中,因此无法通过参数扩展删除前缀和后缀。

所以最简单的方法是在开头删除.txt扩展名:

for i in *.txt; do
    pfx=${i%.txt}
    wc -l "${pfx}.txt" > out1.txt
    grep -c "something" "../${pfx%-*}.list" > out2.txt
    grep -c "something" "../${pfx#*-}.list" > out3.txt
done;