Извлечь имя модуля и имя экземпляра из файла verilog/System Verilog

Вам необходимо указать, кому вы предоставляете разрешения, например other, используяchmod o+w testfile.txt

0
28.12.2019, 10:13
3 ответа

Нам нужно recursive regexдля обработки таких случаев сбалансированных + вложенных фигурных скобок.

Сначала мы создаем регулярное выражение $r, которое начинается со скобки ' (', затем ищет элементы без скобок (может не быть там из-за *), затем еще раз рекурсивно, без квадратных скобок и, наконец, балансировочная закрывающая скоба.

$ perl -lne '
    $r = qr/\( [^()]* (?:(??{ $r }) [^()]*)* \)/x;
    print $1 =~ y/\t #//dr while /\G([^()]*) $r/xg;
' file.sv

Результаты:

module_name
instance_name
0
28.01.2020, 02:59

Команда.

awk '{for(i=1;i<=NF;i++){if (($i ~ /module/)||($i ~ /instance/)) print $i}}' filename

выход

module_name
instance_name
0
28.01.2020, 02:59

Ваш файл соответствует этим правилам:

  • Каждая строка содержит ровно три пробела.
  • Имя модуля — это то, что предшествует первому пробелу.
  • Имя экземпляра — это то, что находится между вторым и третьим пробелами.

Если это не так, отредактируйте свой вопрос. чтобы дать лучшее объяснение и лучшие примеры.

сед

Используйте командуseds для замены(s)для соответствия всей строке, с группой захвата, идущей от начала линии вверх через первое пространство и вторую группу захвата переход от второго пробела к третьему (, исключая конечные точки ). Затем выведите две захваченные строки:

sed 's/^\([^ ]* \)[^ ]* \([^ ]*\).*/\1\2/'

П.С. Если на самом деле пробелов больше трех, и имя экземпляра находится между вторым -- -последним и последним, изменить на это:

sed 's/^\([^ ]* \).* \([^ ]*\).*/\1\2/'

pcregrep

Та же логика, другой инструмент:

pcregrep -o1 -o2 '^([^ ]* )[^ ]* ([^ ]*).*'

-o1 -o2эквивалентно \1\2.

Применяется тот же постскриптум.

0
28.01.2020, 02:59

Теги

Похожие вопросы