Предполагая, что SignalData - это файл, содержащий информацию о вашей карте портов, следующее будет делать то, что вы хотите.
sed -si 's/\([a-zA-Z]\+\)\(\[[^\]]*\]\)/\.\1(\1\2)/g' SignalData
В sed s означает подстановку, регулярное выражение между первой парой // используется для сопоставления с каждой строкой. Если совпадение найдено, выражение между до / делается для замены того, что было найдено.
Объяснение регулярного выражения
\([a-zA-Z]\+\) - Matches a series of alphabets (like SignalName) and captures it into
\1. If you want only the SignalName string to match, replace [a-zA-Z]\+ with SignalName.
\(\[[^\]]*\]\) - Matches the [some character] part and captures it into \2
Наконец, мы используем эти захваченные строки для построения желаемой строки.
Если вы хотите поэкспериментировать с этим перед запуском своего файла, используйте sed -s вместо sed -si. Это покажет результаты преобразования на стандартный вывод, фактически не изменяя файл