У меня есть файл .po. Мне нужно скопировать значение msgid в значение msgstr, если msgstr пуст.
Например
msgid "Hello"
msgstr ""
msgid "Dog"
msgstr "Cane"
Должен стать
msgid "Hello"
msgstr "Hello"
msgid "Dog"
msgstr "Cane"
В настоящее время, в целях тестирования, я работаю с другим файлом, но окончательный скрипт будет работать встроенным.
#!/bin/bash
rm it2.po
sed $'s/^msgid.*/&\\\n---&/' it.po > it2.po
sed -i '/^msgstr/d' it2.po
sed -i 's/^---msgid/msgstr/' it2.po
Этот скрипт имеет 2 проблемы (как минимум):
- копирует msgid в msgstr, даже если msgstr не пуст;
- Я почти уверен, что существует одна строка или более элегантное решение.
Любая помощь будет оценена по достоинству. Заранее спасибо.
sed
из коробки ничего подобного не делает, хотя некоторые очень старые реализацииsed
могут иметь максимальную длину строки (хотя, вероятно, значительно больше). - person tripleee   schedule 01.06.2021final script will works inline
- что-i
в любой команде (sed, perl, ruby, gawk, что угодно) - это просто синтаксический сахар, который на самом деле не выполняет встроенное редактирование, он использует временный файл за кулисами. Вы можете так же легко сделатьtmp=$(mktemp) && sed 's/old/new/' file > "$tmp" && mv "$tmp" file
, если ваша sed или любая другая команда не имеет-i
для редактирования псевдо-на месте. - person Ed Morton   schedule 01.06.2021