Bash 拆分文件名,在分隔符中带有空格和破折号



我有一堆文件,我可以通过以下命令获得这些文件(其中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

以下是许多方法之一:

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/"`

相关内容

最新更新