首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用awk sed linux命令替换PO msgstr

使用awk sed linux命令替换PO msgstr
EN

Stack Overflow用户
提问于 2019-07-15 17:10:12
回答 3查看 75关注 0票数 0

我有一个语言文件woocommerce-fr-Fr.po

我试图将第2行(msgstr)替换为像这样的第一行(msgid )

在此之前:

代码语言:javascript
复制
msgid "Learn how to upgrade"
msgstr "Apprenez comment mettre à jour"

预期结果:

代码语言:javascript
复制
msgid "Learn how to upgrade"
msgstr "Learn how to upgrade"

有26000条线,所以人工搜索和更换是不可行的。

下面是我的代码尝试:

代码语言:javascript
复制
sed 's/\([^""]*\)msgstr\(.*\)/\1lol\2/' 1.txt
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-07-15 17:27:59

sed不能跨越新的边界(这不是不可能的,但它是不平凡的,有点令人沮丧),但这是足够容易的奥克。

代码语言:javascript
复制
awk '$1 == "msgid" { s=$0; sub(/msgid/, "msgstr", s); print; print s; next }
    $1 == "msgstr" { next }
    1' woocommerce-fr-Fr.po >new.po

当我们看到一个msgid时,我们打印它,然后打印一个修改过的行,在这里我们用msgstr替换了msgid。我们跳过的任何剩下的msgstr行。其他任何东西都会逐字通过。

票数 0
EN

Stack Overflow用户

发布于 2019-07-15 17:25:42

代码语言:javascript
复制
$ awk 'NR%2{print; sub(/[^ ]+/,"msgstr"); print}' file
msgid "Learn how to upgrade"
msgstr "Learn how to upgrade"
票数 0
EN

Stack Overflow用户

发布于 2019-07-15 17:31:53

GNU sed解决方案:

代码语言:javascript
复制
sed '/^msgid "\([^"]*\).*/{N;s//msgid "\1"\nmsgstr "\1"/;}'

使用POSIX sed,您需要:

代码语言:javascript
复制
sed '/^msgid "\([^"]*\).*/{N;s//msgid "\1"\'$'\n''msgstr "\1"/;}'

如果一行以msgid开头,请读取下一行,提取第一对"之间的部分,然后用msgid和msgstr输出格式化的输出。在重新生成中测试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57044371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档