Как я могу дополнить каждую строку в текстовом файле заданным количеством пробелов с неравномерными строками длины?

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

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

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

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

4
задан Jason Aller
30.01.2023 4:43 Количество просмотров материала 3005
Распечатать страницу

2 ответа

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

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

enter image description here

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

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

вторая замена, которая обрезает. enter image description here

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

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

когда это применяется с "заменить" он должен обрезать все линии на ту же длину.

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

0
отвечен Jason Aller 2023-01-31 12:31

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

 printf "%s   " "your_string_of_text"

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

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

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

0
отвечен SaxDaddy 2023-01-31 14:48

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх