Все это можно сделать с помощью встроенного в bash расширения параметров .В частности, строковые индексы и удаление подстрок .
$ a=Homo_sapiens; prefix=${a:0:3}; a=${a#*_}; postfix=${a:0:3}; echo $prefix$postfix
Homsap
$ a=Canis_lupus; prefix=${a:0:3}; a=${a#*_}; postfix=${a:0:3}; echo $prefix$postfix
Canlup
Использование встроенных команд bash всегда более эффективно, чем создание отдельных подоболочек (-ей) для вызова утилит для выполнениято же самое.
Пояснение
Ваша строковый индекс форма (только bash) позволяет индексировать символы из строки, например
* ${parameter:offset:length} ## indexes are zero based, ${a:0:2} is 1st 2 chars
Где parameter
- это просто имя переменной, содержащей строку.
(вы можете индексировать с конца строки, используя отрицательное смещение, которому предшествует space
или заключенное вкруглые скобки, например, a=12345; echo ${a: -3:2}
выходные данные "34"
)
prefix=${a:0:3} ## save the first 3 characters in prefix
a=${a#*_} ## remove the front of the string through '_' (see below)
postfix=${a:0:3} ## save the first 3 characters after '_'
Ваше удаление подстроки форм (POSIX):
${parameter#word}
обрезать до 1-говхождение слова из параметра слева ${parameter##word}
обрезка до последнего вхождения слова из параметра слева
и
${parameter%word}
обрезка до1-е вхождение слова из параметра справа ${parameter%%word}
обрезка до последнего вхождения словаиз параметра справа
( слово также может содержать глобирование для расширения до шаблона)
a=${a#*_} ## trim from left up to (and including) the first '_'
См. bash (1) -Страница руководства Linux для полной информации.