Regex 我可以用perl替换输入映射文件中列出的正则表达式来修改输入csv吗?

Regex 我可以用perl替换输入映射文件中列出的正则表达式来修改输入csv吗?,regex,perl,Regex,Perl,我想用同一映射文件中列出的正则表达式替换映射文件中列出的几个正则表达式,正则表达式之间用“:”或其他分隔符分隔 我想在一个输入csv文件中进行所有这些替换,并生成一个包含所有这些替换的输出文件。 所以,我有2个输入和1个输出文件。 例如 1.)映射文件内容,例如 GMAC(\d+)\u RMII\u REF\u CLK\O:GMAC$1\u RMII\u REF\u CLKO GMAC(\d+)\u RMII\u REF\u CLK\u I:GMAC$1\u RMII\u REF\u CLKI

我想用同一映射文件中列出的正则表达式替换映射文件中列出的几个正则表达式,正则表达式之间用“:”或其他分隔符分隔

我想在一个输入csv文件中进行所有这些替换,并生成一个包含所有这些替换的输出文件。 所以,我有2个输入和1个输出文件。 例如

1.)映射文件内容,例如
GMAC(\d+)\u RMII\u REF\u CLK\O:GMAC$1\u RMII\u REF\u CLKO GMAC(\d+)\u RMII\u REF\u CLK\u I:GMAC$1\u RMII\u REF\u CLKI SPI[(\d+):SPI$1 ,SPI(\d+),:,SPI$1_SPI$1, ,LIN(\d+),:,UART_u$1_u$1, LIN(\d+)\u-TX:TXD

2.)输入内容文件 ,GMAC0\u RMII\u参考时钟O,GMAC\u 0,,O, ,GMAC0_RMII_REF_CLK_I,GMAC_0,,I, ,GMAC1\u RMII\u REF\u CLK\u O,GMAC\u 1,,O, ,GMAC1\u RMII\u REF\u CLK\u I,GMAC\u 1,,I, ,DSPI2_SOUT,DSPI_2,,O, ,LIN1_TX,LINFlex_1,,O

3.)我的输出文件应该包含如下内容 ,GMAC0\u RMII\u REF\u CLKO,GMAC\u 0,,O,GMAC0\u RMII\u REF\u CLKI,GMAC\u 0,,I, ,GMAC1\u RMII\u REF\u CLKO,GMAC\u 1,,O,GMAC1\u RMII\u REF\u CLKI,GMAC\u 1,,I, ,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);
            my $content0 = qr/$content[0]/;
            my $content1 = qr/$content[1]/;
            …
            $io_data =~ s/$content0/$content1/g; 
my$io\u data=read\u文件($io\u信号\u表);
my$in_data=读取文件($Input_Muxing);
打开(MAP_文件,“$MAP_文件”)| | die“无法打开$MAP_文件以读取$!”;
while(我的$line=){
chomp($line);
my@content=split(“:”,$line);
我的$content0=qr/$content[0]/;
我的$content1=qr/$content[1]/;
#打印“\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;
}
关闭(映射文件);
写入文件($IO\信号\表格\模块,$IO\数据);
写入文件($Input\u Muxing\u mod,$in\u data);
附言: 我正在使用perl。我可以在脚本中看到所有这一切,但没有找到一个示例,它可以根据我的需要从文件中读取替换正则表达式。 我基本上避免了使用perl替换gvim命令脚本。 我正在RedhatLinuxV5.12.2上使用perl

我正在尝试以下不起作用的代码:

            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);
            my $content0 = qr/$content[0]/;
            my $content1 = qr/$content[1]/;
            …
            $io_data =~ s/$content0/$content1/g; 

不要将替换的替换部分作为正则表达式引用。原因:
qr
运算符返回字符串的规范化版本,格式为
(?-xism:…)
,这不适合替换。只需使用
my$content1=$content[1]

您的文件示例的格式似乎有问题。如何处理?你能详细说明一下吗?所有的模式对都在帖子的一个逻辑行上,而你的代码每行一对;但你同时编辑了它。