如何用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
相关产品推荐
相关产品推荐

