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 匹配的模式就会作为测试的参数提供。我真的没想到上面的方法会起作用,但我已经尝试了我能想到的 $() 括号、反引号和转义符的所有组合,并且在任何地方都找不到提到这种情况的地方。帮助?
尝试这个:
sed -n -e "s/.*\(00\).*/$1$2/p" testfile.txt | sh
Run Code Online (Sandbox Code Playgroud)
注意:我的正则表达式可能是错误的,但重要的是通过管道传输到 shell ( sh
)