加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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

发布时间:2020-12-13 22:47:12 所属栏目:Linux 来源:网络整理
导读:我正在尝试编写一个简短的脚本,其中我使用sed搜索流,然后根据 shell函数的结果在流上执行替换,这需要来自sed的参数,例如: #!/bin/shfunction test { echo "running test" echo $1 }sed -n -e "s/.*(00).*/$(test)/p" testfile.txt 其中testfile.txt包含:
我正在尝试编写一个简短的脚本,其中我使用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

(每个之间都有换行符;它们会被您的网站格式化删除).好吧,这个脚本适合我(输出“运行测试”),但显然没有传递给测试的参数.我想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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读