1

У меня есть этот текстовый файл, который я пытаюсь разобрать, в нем есть символы, такие как ниже:

abcd  a27382  ESH738 991839
ahsj  dhaksj  GSH736 774828
ahsj  dhaksj  RHA330
ahsj  dhaksj  GSH736 774828

Мой вопрос: как я могу вставить 3 пробела после последнего набора чисел с правой стороны по всем строкам без блокнота, выполняющего возврат каретки, когда я добираюсь до конца последнего номера?

Мне нужно сделать это для более чем 40000 строк, поэтому вручную нажимать клавишу пробела в конце каждой строки, чтобы получить эти 3 дополнительных пробела, не может быть и речи. Также в местах, где нет номера (пример, строка 3), мне все еще нужны эти дополнительные пробелы, чтобы компенсировать пропущенные числа, в этом случае это будет 9 пробелов (6 для несуществующих номеров и 3 для последнего пробелы после). Пожалуйста, дайте мне знать, если вы знаете какой-либо простой способ сделать это, так как это очень поможет, спасибо!

2 ответа2

1

Используя Notepad++, можно выполнять две замены на основе регулярных выражений, которые будут заполнять все строки пробелами, а затем обрезать все строки до одинаковой длины. Я не проверял производительность этого метода с 40 000 строк файла.

Первая замена собирается добавить пробелы справа от текста:

На вкладке замены установите "Регулярное выражение" и убедитесь, что "соответствует новой строке" и "Обтекание" отключены. Введите ^(.*) Что означает сопоставить все в строке в "Найти что" и введите $1 а затем количество пробелов, которые вы хотите добавить (в вашем примере добавьте 9).

После нажатия кнопки «заменить» все строки должны иметь как минимум желаемую длину, а многие будут длиннее, чем вы хотите.

Вторая замена, которая уравновешивает.

Для второй замены мы собираемся взять две части на линию и выбросить одну.

Сначала убедитесь, что в "Заменить на" есть только $1 а после нет пробелов. Затем измените "Найти что" на ^(.{28})(.*) Который читает, находя в начале строки первые 28 (измените на 31, чтобы в качестве отступа оставалось 3 пробела) символы в первой группе, а затем найдите все остальное в строке во второй группе.

Когда это применяется с "Заменить", оно должно обрезать все строки до одинаковой длины.

Примечание: некоторым движкам регулярных выражений может понадобиться $ что означает добавление "конца строки" при использовании этой техники.

0

это будет зависеть от того, пишете ли вы оригинальный файл или нет. Если вы создаете этот файл, вы можете использовать printf вот так

 printf "%s   " "your_string_of_text"

printf есть много опций форматирования, которые вы можете использовать. Но если вы редактируете файл, sed будет вам полезен

 sed 's/^.*$/&\ \ \ /g' some_file > some_other_file

Это добавит 3 пробела в конец каждой строки в some_file и запишет вывод в some_other_file . Обратите внимание, что пробелы экранированы, и амперсанд служит для записи первого шаблона на выход.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .