Оболочка команда / обходной путь для преобразования строк в кавычках в нормальные строки - PullRequest
0 голосов
/ 10 ноября 2011

Я пишу сценарий оболочки, который выводит все непереведенные строки из файла 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 ]

1 голос
/ 10 ноября 2011

Добавление 's/^\s"\|"$//g' и 's/\\"/"/g' к вашей команде sed должно убрать начальный и конечный ", а также преобразовать все \" в ".

Полная команда:

msgattrib --untranslated --no-wrap wa.po | grep msgid | sed 's/msgid[^ ]*//; s/^\s"\|"$//g; s/\\"/"/g'
1 голос
/ 10 ноября 2011

Полагаю, все должно быть в порядке:

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'
...