У меня есть текстовый файл много тысяч строк долго с ASCII и non-ACII символами. Это, как предполагается, следует за шаблоном
First line: only non-ASCII characters
Second line: only non-ASCII characters
Third line: only ASCII characters
Fourth line: mix of ASCII and non-ASCII characters
К сожалению, действительность - то, что это смотрит что-то как следующий пример, где в середине это пропускает строку, которая смешивает символы неASCII и ASCII:
日本語のみ
日本語のみ
English words only
English and 日本語
日本語のみ
日本語のみ
English words only
日本語のみ
日本語のみ
English words only
English and 日本語
К счастью, насколько я могу сказать, это - только строка, которая смешивает ASCII и символы неASCII, который иногда отсутствует. Подразумевать, что, что должно быть группами из 4 строк, иногда является группами только 3.
Для фиксации файла я должен:
Результат должен быть:
日本語のみ
日本語のみ
English words only
English and 日本語
日本語のみ
日本語のみ
English words only
+Aあ+
日本語のみ
日本語のみ
English words only
English and 日本語
(Я принял решение сделать заполнителя +Aあ+
так, чтобы это соответствовало соединению ASCII и неASCII как строки, это помогает для.)
Я нашел, что могу использовать sed для вставки новых строк sed-e, "/это существующий текст/a \'this, новая строка'" <file.text. И я узнал, что могу искать символы ASCII с использованием sed LC_ALL=C
и [\d0-\d127]
.
Однако я неясен о том, как сделать условное выражение отдельным от поиска. Я имею в виду, я мог вставить строку после каждого экземпляра ASCII только символы, но как я делаю поиск, который вставляет строку, когда вся строка ASCII найдена, и следующей строкой является только неASCII?
Обратите внимание на то, что я не слежу за использованием sed. Если бы ответ может быть предоставлен с помощью Gedit, LibreOffice или какой-либо операции командной строки, которая была бы большой.
На основе Ваших недавних вопросов это кажется, что у Вас есть проблема XY
Вот sed решение на основе ответа @Zanna на Ваш предыдущий вопрос, Как я ищу строки в файле, которые только содержат символы ASCII и затем действуют на них?
$ LC_ALL=C sed -E '/^[\d0-\d127]+$/ {$!N; s/\n[^\d0-\d127]+$/\n+Aあ+&/;}' file
日本語のみ
日本語のみ
English words only
English and 日本語
日本語のみ
日本語のみ
English words only
+Aあ+
日本語のみ
日本語のみ
English words only
English and 日本語
Используя awk:
awk '1; ! /^[\x01-\x7F]*$/ {next} {getline} !/[\x01-\x7F]/ {print "+Aあ+"} 1'
1
истинное условие, и действие по умолчанию в этом случае должно распечатать.!
) полностью ASCII (/^[\x01-\x7F]*$/
), пропустите обработку большего количества правил (продолжающийся к следующей строке, но правилам обработки от 1).{getline}
, и если это не делает !
имейте любые символы ASCII /[\x01-\x7F]/
в нем распечатайте своего заполнителя.getline
.Я предполагаю, что Ваши 日本語のみ строки не имеют пробелов полуширины или пунктуации (. !
по сравнению с 。 !
).