#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» внутри фраз : (