我有一个 .po 文件,如果 msgstr 为空,我需要将 msgid 值复制到 msgstr 值中。
例如
msgid "Hello"
msgstr ""
msgid "Dog"
msgstr "Cane"
Run Code Online (Sandbox Code Playgroud)
应该成为
msgid "Hello"
msgstr "Hello"
msgid "Dog"
msgstr "Cane"
Run Code Online (Sandbox Code Playgroud)
目前,出于测试目的,我正在处理另一个文件,但最终脚本将内联工作。
#!/bin/bash
rm it2.po
sed $'s/^msgid.*/&\\\n---&/' it.po > it2.po
sed -i '/^msgstr/d' it2.po
sed -i 's/^---msgid/msgstr/' it2.po
Run Code Online (Sandbox Code Playgroud)
这个脚本有两个问题(至少):
任何帮助,将不胜感激。提前致谢。
您可以考虑更好的工具gnu awk而不是sed:
awk -i inplace -v FPAT='"[^"]*"|\\S+' '$id != "" && $1 == "msgstr" && (NF==1 || $2 == "\"\"") {$2=id} $1 == "msgid" {id=$2} 1' file
msgid "Hello"
msgstr "Hello"
msgid "Dog"
msgstr "Cane"
Run Code Online (Sandbox Code Playgroud)
-v FPAT='"[^"]*"|\\S+' 使带引号的字符串或任何非空白字段成为单个字段。
更易读的形式:
awk -i inplace -v FPAT='"[^"]*"|\\S+' '
$id != "" && $1 == "msgstr" && (NF==1 || $2 == "\"\"") {$2=id}
$1 == "msgid" {id=$2}
1' file
Run Code Online (Sandbox Code Playgroud)