Shell命令/解决方法将引用的字符串转换为普通字符串

时间:2011-11-09 21:16:23

标签: bash shell sed awk echo

我正在编写一个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[^ ]*//"

2 个答案:

答案 0 :(得分:1)

我想这应该没问题:

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'

答案 1 :(得分:1)

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

完整命令:

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