I need to splite string with file name, in 5 parts, as an example below:
#!/usr/bin/env bash
str="python-zope-proxy-4.3.5-1-x86_64.chi.zst"
pkg_re='(.+)-[^-]+-[0-9]+-([^.]+)\.chi.zst*'
[[ $str =~ $pkg_re ]] &&
pkg_base = ${BASH_REMATCH[1]}
pkg_arch = ${BASH_REMATCH[2]}
echo $pkg_base
echo $pkg_arch
The blocks must be as follows:
block 1 - python-zope-proxy # pkg_base
block 2 - 4.3.5-1 # pkg_version_build
block 3 - 4.3.5 # pkg_version
block 4 - 1 # pkg_build
block 5 - x86_64 # pkg_arch
With the regex below, I get block 1 and block 5, as shown above.
str="python-zope-proxy-4.3.5-1-x86_64.chi.zst"
pkg_re='(.+)-[^-]+-[0-9]+-([^.]+)\.chi.zst*'
[[ $str =~ $pkg_re ]] &&
pkg_base = ${BASH_REMATCH[1]}
pkg_arch = ${BASH_REMATCH[2]}
The expression would also have to treat as file name strings in the following cases:
str="python-4.3.5-1-x86_64.chi.zst"
str="python-zope-4.3.5-1-x86_64.chi.zst"
str="python-zope-proxy-4.3.5-1-x86_64.chi.zst"
(.+)-(([^-]+)-([0-9]+))-([^.]+)\.chi\.zstregex101.com/r/CSeGSk/1