You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在sed的w命令中反向引用文件名?

解决sed动态指定w命令文件名的问题

问题原因

sed的w命令后的文件名是静态解析的——sed启动时就会把&当作字面文件名创建,不会在替换操作中将其解析为匹配到的内容,这就是你原命令生成&文件的原因。

可行方案

方案1:sed生成shell命令后执行

通过sed将输入行转换为对应的shell写入命令,再交给bash执行:

echo 'abc123' | sed -n 's/^\(abc\)\(.*\)/echo "\2" > "\1"/p' | bash
  • 解析:\1捕获前缀abc作为文件名,\2捕获剩余内容123作为要写入的文本;sed生成echo "123" > "abc"命令,由bash执行完成写入。

方案2:使用GNU sed的e扩展命令

如果你的环境是GNU sed,可以直接用e命令执行替换后的shell命令,无需额外管道:

echo 'abc123' | sed -n 's/^\(abc\)\(.*\)/echo "\2" > "\1"/e'
  • e命令会将替换后的结果作为shell命令直接执行,一步完成解析文件名、写入内容的操作。

内容的提问来源于stack exchange,提问作者ceving

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 01:35:57