Bash拆分文件名用空格和破折号分隔符

时间:2013-10-19 00:43:12

标签: regex bash shell parsing delimiter

我有一堆文件,我可以通过以下命令获得(其中EXT是扩展名):

oIFS=$IFS
IFS=$'\n'

array=$(find . -iregex '.*\(EXT\)' -print)
for file in ${array[@]}; do
    echo "$file"| cut -f1 -d" - "
done

IFS=oIFS

文件名格式如下:PARTONE - PARTTWO其中第一部分是任何字符(但not a dash [-],第二部分是任何字符,可以包含短划线)

有没有办法让PARTONE和PARTTWO成为他们自己的变量?目前,(我相信)由于空间是分隔符的一部分,它不起作用,我收到以下错误cut: bad delimiter

1 个答案:

答案 0 :(得分:1)

以下是众多方法之一:

oIFS=$IFS
IFS=$'\n'

array=$(find . -iregex '.*\(EXT\)' -print)
for file in ${array[@]}; do
    PART_ONE=`echo $file | sed "s/ - .*$//"`
    PART_TWO=`echo $file | sed "s/^[^-]* - //"`
done

IFS=$oIFS

从第一部分中删除./前缀(假设一个始终存在):

PART_ONE=`echo $file | sed "s/^\.\/\([^-]*\) - .*$/\1/"`

要从第二部分删除扩展程序:

PART_TWO=`echo $file | sed "s/^[^-]* - \(.*\)\.[^\.]*$/\1/"`