Вы можете использовать awk
следующим образом:
awk -F'/' '/^[*] /{m=$1;n=$2;gsub(/^[*] /, "", m); gsub(/-/, " ", n); print m": "toupper(substr(n,1,1)) substr(n, 2)}' file > newfile
Подробности
-F'/'
- разделитель полей установлен на /
/^[*] /
- находит все строки, которые начинаются с *
и пробел m=$1;n=$2;
- Поле 1 назначено на m
, а значение поля 2 назначено на n
gsub(/^[*] /, "", m);
- удаляет начальные "* "
gsub(/-/, " ", n);
- заменяет все -
пробелом в n
print m": "toupper(substr(n,1,1)) substr(n, 2)}'
- печатает результат:объединяет m
значение, :
и пробел, а затем n
значение с первой буквой в верхнем регистре.
См. онлайн-демонстрацию :
s="* XYZ-1234/a-string-of-words-separated-by-dashes"
awk -F'/' '/^[*] /{m=$1;n=$2;gsub(/^[*] /, "", m); gsub(/-/, " ", n); print m": "toupper(substr(n,1,1)) substr(n, 2)}' <<< "$s"
# => XYZ-1234: A string of words separated by dashes