我有一个语言文件woocommerce-fr-Fr.po
。
我正在尝试替换第二行 (msgstr),第一行是(msgid)。
之前:
msgid "Learn how to upgrade"
msgstr "Apprenez comment mettre à jour"
所需结果:
msgid "Learn how to upgrade"
msgstr "Learn how to upgrade"
有26000条som行,因此手动搜索和替换是不可行的。
这是我的代码尝试:
sed 's/\([^""]*\)msgstr\(.*\)/\1lol\2/' 1.txt
答案 0 :(得分:0)
$ awk 'NR%2{print; sub(/[^ ]+/,"msgstr"); print}' file
msgid "Learn how to upgrade"
msgstr "Learn how to upgrade"
答案 1 :(得分:0)
sed
不能跨换行符边界匹配(并非不可能,但这并不平凡并且有些令人沮丧),但这对于Awk来说很容易。
awk '$1 == "msgid" { s=$0; sub(/msgid/, "msgstr", s); print; print s; next }
$1 == "msgstr" { next }
1' woocommerce-fr-Fr.po >new.po
当我们看到msgid
时,将其打印出来,然后打印一条修改过的行,其中将msgid
替换为msgstr
。我们会跳过所有剩余的msgstr
行。其他所有内容都逐字通过。
答案 2 :(得分:0)
GNU sed
解决方案:
sed '/^msgid "\([^"]*\).*/{N;s//msgid "\1"\nmsgstr "\1"/;}'
使用POSIX sed
,您需要:
sed '/^msgid "\([^"]*\).*/{N;s//msgid "\1"\'$'\n''msgstr "\1"/;}'
如果一行以msgid
开头,请阅读下一行,提取第一对"
之间的部分,并使用msgid和msgstr输出格式化的输出。在repl中进行了测试。