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

Ben*_*mer 5 linux arguments sed substitution

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

#!/bin/sh

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

sed -n -e "s/.*\(00\).*/$(test)/p" < testfile.txt
Run Code Online (Sandbox Code Playgroud)

其中 testfile.txt 包含:

1234
2345
3006
4567
Run Code Online (Sandbox Code Playgroud)

(每个之间都有换行符;它们会被您的网站格式删除)。好吧,该脚本对我有用(输出“正在运行测试”),但显然没有传递给测试的参数。我希望 sed 行类似于:

sed -n -e "s/.*\(00\).*/$(test \1)/p" < testfile.txt
Run Code Online (Sandbox Code Playgroud)

和输出:

running test
00
Run Code Online (Sandbox Code Playgroud)

这样 sed 匹配的模式就会作为测试的参数提供。我真的没想到上面的方法会起作用,但我已经尝试了我能想到的 $() 括号、反引号和转义符的所有组合,并且在任何地方都找不到提到这种情况的地方。帮助?

Boh*_*ian 0

尝试这个:

sed -n -e "s/.*\(00\).*/$1$2/p" testfile.txt | sh
Run Code Online (Sandbox Code Playgroud)

注意:我的正则表达式可能是错误的,但重要的是通过管道传输到 shell ( sh)