使用SED/PERL执行正则表达式捕获和替换

13 浏览
0 Comments

使用SED/PERL执行正则表达式捕获和替换

我有一个看起来像这样的数据(我们称之为文件submit.txt):\n

dir1/pmid_5409464.txt
dir1/pmid_5788247.txt
dir1/pmid_4971884.txt

\n我想要做的是执行内联文件正则表达式更改,使其结果如下所示:\n

perl mycode.pl /home/neversaint/dir1/pmid_5409464.txt > /home/neversaint/dir1/pmid_5409464.output
perl mycode.pl /home/neversaint/dir1/pmid_5788247.txt > /home/neversaint/dir1/pmid_5788247.output
perl mycode.pl /home/neversaint/dir1/pmid_4971884.txt > /home/neversaint/dir1/pmid_4971884.output

\n有没有一行SED/Perl命令可以做到这一点?\n我的困难在于捕获输入文件名,然后基于每一行创建输出文件(.output)。我被卡在这里:\n

sed 's/^/perl mycode.pl \/home\/neversaint\/dir1\//g' submit.txt |
sed 's/$/ >/'

0
0 Comments

在这篇文章中,我们将探讨使用SED/PERL执行正则表达式捕获和替换的问题以及解决方法。

在上述示例中,我们使用了一个Perl oneliner命令来执行正则表达式捕获和替换。该命令的语法如下:

perl -pe "s@(.*?)(\.txt) mycode.pl /home/neversaint/\\1\\2 > /home/neversaint/\\1.output" submit.txt

上述命令将在控制台中生成一个替换后的字符串,并且您需要将输出重定向到另一个文件中。

如果要在文件内部进行替换(行内替换),您可以添加-i选项。例如:

perl -pe "s@(.*?)(.txt) mycode.pl /home/neversaint/\1\2 > /home/neversaint/\1.output" -i submit.txt

上述命令将在submit.txt文件本身中执行替换操作。

这个问题的出现是因为我们想要在给定的文件中执行正则表达式捕获和替换操作。我们可以使用SED或PERL来实现这个目标。在上述示例中,我们使用了PERL的正则表达式替换功能。

要解决这个问题,我们可以使用PERL的替换命令(s///)来捕获和替换字符串。我们可以通过在命令行中使用perl -pe来执行一行程序,其中-p参数用于逐行处理输入文件,-e参数用于指定要执行的程序。

在替换命令中,我们使用@(.*?)来捕获要替换的字符串,并使用\1和\2来引用捕获的字符串的组。通过在替换字符串中使用这些引用,我们可以在替换过程中使用捕获的字符串。

通过在命令行中指定文件名,我们可以将替换操作应用于给定的文件。如果我们想要在文件内部进行替换(行内替换),我们可以使用-i选项。

使用这些方法,我们可以轻松地执行正则表达式捕获和替换操作,无论是在控制台中生成替换后的字符串还是在文件内部进行替换。

0
0 Comments

这是一个关于使用SED或PERL执行正则表达式捕获和替换的问题。下面是这个问题的原因以及解决方法的整理。

问题的原因:

在给出的问题中,用户请求使用SED进行一行命令的操作。用户提供了一个SED命令,并使用正则表达式进行了替换操作。然而,由于文件名中包含多个斜杠字符(/),在替换操作中使用斜杠作为分隔符可能导致错误。因此,问题的原因是在字符串中有多个斜杠字符时,使用斜杠作为分隔符会导致SED命令执行失败。

解决方法:

为了解决这个问题,可以使用其他分隔符代替斜杠字符。在替换操作中,SED命令也可以使用下划线(_)、竖线(|)或冒号(:)作为分隔符。通过使用其他分隔符,可以避免由于字符串中存在斜杠字符而导致的错误。

下面是使用Perl来解决这个问题的示例代码:

perl mycode.pl \/home\/neversaint\/\1.txt > \/home\/neversaint\/\1.output/

在这个示例代码中,使用了Perl的正则表达式捕获和替换功能。通过将SED命令替换为Perl代码,并使用斜杠作为分隔符,可以成功执行捕获和替换操作。

以上是关于使用SED或PERL执行正则表达式捕获和替换的问题的原因和解决方法的整理。通过使用其他分隔符代替斜杠字符,可以避免由于字符串中存在斜杠字符而导致的错误。同时,使用Perl的正则表达式捕获和替换功能也可以成功执行这种操作。

0
0 Comments

使用SED/PERL执行正则表达式捕获和替换。

问题的出现原因是:在使用SED命令进行正则表达式捕获和替换时,需要使用转义的括号来捕获分组,并通过\1、\2等访问这些分组。

解决方法是:使用SED命令结合正则表达式进行捕获和替换。例如,可以使用以下命令进行捕获和替换:

sed 's/^\(.*\).txt$/perl mycode.pl \/home\/neversaint\/\1\.txt > \/home\/neversaint\/\1.output/' submit.sh

其中,`\(.*\).txt`用于捕获文件名(不包含扩展名),然后通过替换字符串`perl mycode.pl \/home\/neversaint\/\1\.txt > \/home\/neversaint\/\1.output`进行替换。这样可以将文件名作为参数传递给Perl脚本,并将输出重定向到相应的输出文件中。

输出结果为:

perl mycode.pl /home/neversaint/dir1/pmid_5409464.txt > /home/neversaint/dir1/pmid_5409464.output
perl mycode.pl /home/neversaint/dir1/pmid_5788247.txt > /home/neversaint/dir1/pmid_5788247.output
perl mycode.pl /home/neversaint/dir1/pmid_4971884.txt > /home/neversaint/dir1/pmid_4971884.output

补充说明:上述解决方法中提到,SED命令没有内置的原地文件编辑功能(GNU sed具有-i选项)。但仍然可以通过其他方法实现原地编辑,只是上述解决方案只是将结果打印到标准输出中。可以使用Perl的单行命令或使用sed -i选项来实现原地文件编辑。

另外,如果希望将代码分成多行以便在编辑器中更容易阅读,可以使用shell变量将其分割成多行。也可以将搜索和替换部分放在一个文件中,并使用sed -f选项调用该文件。

0