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

如何用sed实现.po文件中空msgstr自动填充对应msgid值

空msgstr自动填充对应msgid的实现方案

直接用awk处理即可,完美适配需求,单命令完成逻辑,不会修改已有内容的msgstr:

基础测试用法(生成新文件不修改原文件)

awk '/^msgid/ {save=$0; sub(/^msgid /,"",save)} /^msgstr ""$/ {$0="msgstr " save} 1' it.po > it2.po

逻辑说明:

  • 匹配到msgid开头的行时,保存整行内容到变量save,再移除开头的msgid 前缀,仅保留引号包裹的内容部分
  • 仅当匹配到完全为空的msgstr ""行时,才将当前行替换为msgstr加之前保存的msgid内容
  • 末尾的1是awk的默认打印逻辑,会输出所有处理后的行

原地编辑用法(正式环境用,直接修改原po文件)

GNU awk(绝大多数Linux发行版默认预装)支持原地编辑参数,不需要生成中间文件:

awk -i inplace '/^msgid/ {save=$0; sub(/^msgid /,"",save)} /^msgstr ""$/ {$0="msgstr " save} 1' it.po

可选sed单行实现

如果偏好sed的写法,GNU sed也可以实现单行原地编辑:

sed -i '/^msgid/{h;n;/^msgstr ""$/{G;s/^msgstr ""\nmsgid /msgstr /}}' it.po

sed方案的可读性略低于awk方案,逻辑和awk一致,仅修改空msgstr的条目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 12:54:04