Могу ли я заменить регулярные выражения, перечисленные во входном файле отображения, чтобы изменить входной CSV, используя perl? - PullRequest
0 голосов
/ 02 марта 2020

Я хочу заменить несколько регулярных выражений, перечисленных в файле карты, регулярным выражением, перечисленным в том же файле карты, разделенным ":" или каким-либо другим разделителем.

Я хочу выполнить все эти подстановки во входном CSV файл и создать выходной файл со всеми этими заменами. Итак, у меня есть 2 входа и 1 выходной файл. Например,

1.) Отображение содержимого файла, например,
GMA C (\ d +) _ RMII_REF_CLK_O: GMAC $ 1_RMII_REF_CLKO GMA C (\ d +) _ RMII_REF_CLK_I: GMAC $ 1_RI_RE \ d +)]: SPI $ 1, SPI (\ d +),:, SPI $ 1_SPI $ 1, LIN (\ d +),:, UART_ $ 1_UART $ 1, LIN (\ d +) _ TX: TXD

2 .) Входной файл содержимого, GMAC0_RMII_REF_CLK_O, GMAC_0,, O, GMAC0_RMII_REF_CLK_I, GMAC_0,, I, GMAC1_RMII_REF_CLK_O, GMAC_1, O, GMAC1_RMII_REF, LINK, LINK, II, DI, IF, CLI , O,

3.) Мой выходной файл должен иметь следующее содержимое: GMAC0_RMII_REF_CLKO, GMAC_0,, O, GMAC0_RMII_REF_CLKI, GMAC_0, I, GMAC1_RMII_REF_CLKO, GMAC_1, O_M_RE_F, GM_1, GM_1, GM_1, GM_1, GM_1 Я,, SPI2_SOUT, SPI2_SPI2,, O,
, TXD, UART_1_UART1,, O,

Я не хочу жестко задавать свой сценарий для всех аналогичных замен. Регулярные выражения в файле сопоставления могут быть определены пользователем.

Я пытаюсь ниже код, который не работает:

            my $io_data = read_file($IO_Signal_Table);
            my $in_data = read_file($Input_Muxing);

            open(MAP_FILE,"$map_file") || die "Can't open $map_file for reading $!";

            while (my $line = <MAP_FILE>) {
            chomp($line);

            my @content = split(":",$line);
            my $content0 = qr/$content[0]/;
            my $content1 = qr/$content[1]/;
            # print "\n $content0 $content1 ";

            $io_data =~ s/$content0/$content1/g; 
            $in_data =~ s/$content0/$content1/g; 

            # $io_data =~ s/$content[0]/$content[1]/g; 
            # $in_data =~ s/$content[0]/$content[1]/g; 
            }


            close(MAP_FILE);

            write_file($IO_Signal_Table_mod,$io_data);
            write_file($Input_Muxing_mod,$in_data);

PS: я использую perl. Я мог видеть все это в скрипте, но не нашел пример, где он читает регулярные выражения замещения из файла, как мне нужно. Я в основном избегаю сценария команды gvim для замены, используя perl. Я использую perl на redhat linux v5.12.2.

1 Ответ

1 голос
/ 03 марта 2020

Я пытаюсь использовать следующий код, который не работает:

            my $content0 = qr/$content[0]/;
            my $content1 = qr/$content[1]/;
            …
            $io_data =~ s/$content0/$content1/g; 

Не заключайте в кавычки часть замены замена как регулярное выражение. Причина: оператор qr возвращает нормализованную версию строки вида (?-xism:…), и это неуместно в качестве замены. Просто используйте my $content1 = $content[1];.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...