Вы должны экранировать (добавить \
) символы .
, поскольку они имеют особое значение в регулярных выражениях.
Как это sed 's/\.-/A/g
Посмотрите в https://en.wikipedia.org/wiki/Regular_expression
Также вы пропускаете первый -e
после вашей команды sed
:
░ tamasgal@greybox.local:~
░ 16:37:45 > echo '... --- ...'| sed -e 's/\.\.\./S/g' -e 's/---/O/g'
S O S
Кстати. вы столкнетесь с большим количеством проблем из-за того, что sed
работает, он заменит части других азбуок Морзе на этапах.
Вы должны рассмотреть возможность добавления начального пробела или новой строки после каждой группы команды Морзе.
Вот пример поэтапного (декодирование SOS9):
░ tamasgal@greybox.local:~
░ 16:43:47 > echo '... --- ... ----.'| sed -e 's/\.\.\./S/g'
S --- S ----.
░ tamasgal@greybox.local:~
░ 16:43:56 > echo '... --- ... ----.'| sed -e 's/\.\.\./S/g' -e 's/---/O/g'
S O S O-.
░ tamasgal@greybox.local:~
░ 16:44:00 > echo '... --- ... ----.'| sed -e 's/\.\.\./S/g' -e 's/---/O/g' -e 's/----\./9/g'
S O S O-.
Одним из решений является включение символа пробела или конца строки ($
) для каждой группы, например:
░ tamasgal@greybox.local:~
░ 16:44:02 > echo '... --- ... ----. '| sed -e 's/\.\.\.[ $]/S/g' -e 's/---[ $]/O/g' -e 's/----\.[ $]/9/g'
SOS9
Кстати. это безобразное решение, но я не буду делать твою домашнюю работу;)