在sed脚本中使用命令替换,并带有参数

| 我正在尝试编写一个简短的脚本,其中我使用sed搜索流,然后根据shell函数的结果对流进行替换,这需要sed的参数,例如
#!/bin/sh

function test {
    echo \"running test\"
    echo $1
    }

sed -n -e \"s/.*\\(00\\).*/$(test)/p\" < testfile.txt
其中testfile.txt包含:
1234
2345
3006
4567
(每行之间使用换行符;您的网站格式会删除它们)。好的,该脚本对我有用(输出\“ running test \”),但是显然没有参数传递给test。我希望sed行是这样的:
sed -n -e \"s/.*\\(00\\).*/$(test \\1)/p\" < testfile.txt
并输出:
running test
00
这样,与sed匹配的模式将作为参数进行测试。我并不是真的希望上面的方法能奏效,但是我尝试了$()括号,反引号和转义符的所有组合,但我在任何地方都找不到这种情况。救命?     
已邀请:
        sed将不执行命令。但是,Perl将在regex命令上使用
/e
选项。
perl -pe \'sub testit { print STDERR \"running test\"; return @_[0]; }; s/.*(00).*/testit($1)/e\' <testfile.txt
如果您不想在线看到stderr,请将其重定向到/ dev / null并拧紧输出。     
        这可能对您有用:
tester () { echo \"running test\"; echo $1; }
export -f tester
echo -e \"1234\\n2345\\n3006\\n4567\" |
sed -n \'s/.*\\(00\\).*/echo \"$(tester \\1)\"/p\' | sh
running test
00
或者,如果您使用的是GNU sed:
echo -e \"1234\\n2345\\n3006\\n4567\" |
sed -n \'s/.*\\(00\\).*/echo \"$(tester \\1)\"/ep\'
running test
00
N.B.您必须记住首先导出函数。     
        尝试这个:
sed -n -e \"s/.*\\(00\\).*/$1$2/p\" testfile.txt | sh
注意:我可能将正则表达式弄错了,但是重要的一点是管道到外壳(
sh
)     

要回复问题请先登录注册