изменить вывод файла gettext .pot, чтобы исключить пустые строки или строки, содержащие только пробелы

У меня есть файл .pot, созданный xgettext в моем исходном коде c ++ в формате:

#: file1.cpp:line
#: file2.cpp:line
msgid "" - empty string

#: file1.cpp:line
#: file2.cpp:line
msgid " \t\n\r" - string contains only spaces

#: file1.cpp:line
#: file2.cpp:line
msgid "real text"

Затем я использую команду как:

grep "#: " "$(POT_FILE)" | sed -e 's/^\(#: \)\(.*)/\2'

иметь только имена файлов и строки для вывода.

Но дело в том, что мне не нужны файлы для строк, содержащих только пробелы.

Это довольно сложно, потому что я должен найти строку msgid «» или что-то вроде этого рядом с последовательностью строк #: blablabla и в соответствии с содержимым строки обходить все предыдущие строки.

Кто-нибудь может помочь с такой командой?

Спасибо!

0

Решение

Если я вас правильно понимаю, поместите в исполняемый файл следующее:

#!/usr/bin/awk -f

BEGIN { FS="\"" } # make it easier to test the text for msgid

# clean "file:line" line and store it in an array called "a"/^#: / { sub(/^#: /, "", $0); a[i++]=$0 }

/^msgid/ {
if( valid_msgid() ) { for( j in a ) print a[j] }
reset() # clear array a after every msgid encountered
}

function reset() {
for( j in a ) { delete a[j]  }
i = 0
}

# put your validity tests here.
# $2 won't contain the entire string if the gettext contains double quotes
function valid_msgid() {
if( length($2) > 0 && $2 !~ /^ / ) return 1
return 0
}

Если я положу вышеупомянутое в файл под названием awko а также chmod +x awko затем беги awko data.pot Я получаю следующее:

#: file1.cpp:line
#: file2.cpp:line

который соответствует вашему последнему разделу, если вы преобразуете «строковые» значения в числа.

Одним из приемов является использование " в качестве разделителя. Если вам нужно отклонить строки, где содержится msgid ", тогда вам придется использовать более сложный синтаксический анализ для определения полного текста сообщения.

У меня нет доступа к xgettext, поэтому я не знаю, были ли комментарии после - в примере плохие строки от вас или программы. Программа xgettext выводит их, разделитель может быть изменен на " - чтобы проверить эти строки в valid_msgid(),

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]