Вот какой-то bash, который сам угадывает разделитель:
#!/bin/bash
delimiter="${1//[[:digit:]]/}"
if echo $delimiter | grep -q "^\(.\)\1\+$"
then
delimiter="${delimiter:0:1}"
if [[ -z $(echo $1 | grep "^\([0-9]\+"$delimiter"\([0-9]\+\)*\)\+$") ]]
then
echo "You seem to have empty fields between the delimiters."
exit 1
fi
if [[ './\' == *$delimiter* ]]
then
n=$( echo $1 | sed "s/\\"$delimiter"/\\n/g" | sort -n | tr '\n' ' ' | sed -e "s/\\s/\\"$delimiter"/g")
else
n=$( echo $1 | sed "s/"$delimiter"/\\n/g" | sort -n | tr '\n' ' ' | sed -e "s/\\s/"$delimiter"/g")
fi
echo ${n%$delimiter}
exit 0
else
echo "The string does not consist of digits separated by one unique delimiter."
exit 1
fi
Это может быть не очень эффективно и чисто, но это работает.
Используйте как bash my_script.sh "00/00/18/29838/2"
.
Возвращает ошибку, если один и тот же разделитель не используется последовательно или два или более разделителя следуют друг за другом.
Если используемый разделитель является специальным символом, он экранируется (, иначе sed
возвращает ошибку ).