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

nev*_*int 9 regex perl sed

我有一个看起来像这样的数据(让我们调用这个文件submit.txt):

dir1/pmid_5409464.txt
dir1/pmid_5788247.txt
dir1/pmid_4971884.txt
Run Code Online (Sandbox Code Playgroud)

我想要做的是执行内联文件正则表达式更改,以便它导致以下结果

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
Run Code Online (Sandbox Code Playgroud)

是否有一个SED/Perl衬垫来做到这一点?

我的困难在于捕获输入文件名,然后.output为每行创建输出文件() - 基于此.我坚持这个:

sed 's/^/perl mycode.pl \/home\/neversaint\/dir1\//g' submit.txt |
sed 's/$/ >/'
Run Code Online (Sandbox Code Playgroud)

hma*_*tt1 15

您可以使用转义括号来捕获组,并使用\ 1,\ 2等访问组.

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

输出:

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
Run Code Online (Sandbox Code Playgroud)

编辑:它看起来不像sed有一个内置的文件编辑(GNU sed有-i选项).它仍然可以,但这个解决方案只是打印到标准.你也可以使用Perl one liner,如下所示:sed编辑文件到位