【问题标题】:Shell command/workaround to turn quoted strings into normal strings将带引号的字符串转换为普通字符串的 Shell 命令/解决方法
【发布时间】:2011-11-09 21:16:22
【问题描述】:

我正在编写一个 shell 脚本,它从 gettext .po 文件中输出所有未翻译的字符串,并坚持一个简单的事情。在我的命令链的末尾,我得到这样的输出:

"less than a minute left"
"%d minutes left"
"logged in as <a href=\"%s\">%s</a>"
"more"

而且我不知道如何在没有引号的情况下回显这些行,如下所示:

less than a minute left
%d minutes left
logged in as <a href="%s">%s</a>
more

请注意,引号是在短语中使用的,所以我不能只通过 sed 删除它们。我希望我知道一个取消引用的命令。比

更安全的东西
 awk '{ print "echo ", $0}' | sh

以防万一这是我到目前为止的工作演示:

 wget https://raw.github.com/vslavik/poedit/master/locales/wa.po
 msgattrib --untranslated --no-wrap wa.po | grep msgid | sed "s/msgid[^ ]*//"

【问题讨论】:

    标签: bash shell sed awk echo


    【解决方案1】:

    's/^\s"\|"$//g''s/\\"/"/g' 添加到您的sed 命令应该去掉前导和尾随",并将所有\" 转换为"

    完整命令:

    msgattrib --untranslated --no-wrap wa.po | grep msgid | sed 's/msgid[^ ]*//; s/^\s"\|"$//g; s/\\"/"/g'
    

    【讨论】:

      【解决方案2】:

      我想这应该没问题:

      msgattrib --untranslated --no-wrap wa.po | grep msgid | sed "s/msgid[^ ]*//"|sed -e 's/^\s"//' -e 's/"$//'
      

      编辑

      这次?

          msgattrib --untranslated --no-wrap wa.po | grep msgid | sed "s/msgid[^ ]*//"\
      |sed -e 's/^\s"//' -e 's/"$//' -e's/\\"/"/g'
      

      【讨论】:

      • 它不会将短语中的 \"%s\" 替换为 "%s" :(
      猜你喜欢
      • 2012-05-12
      • 1970-01-01
      • 2014-04-22
      • 1970-01-01
      • 2016-06-18
      • 2012-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多