Команда оболочки / обходной путь для превращения строк, заключенных в кавычки, в обычные строки

#bash #shell #sed #awk #echo

#bash #оболочка #sed #awk #echo

Вопрос:

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

Ответ №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'
  

Комментарии:

1. Это не заменяет «%s » на «%s» внутри фраз : (