Multiple проходит
На основе дополнительной информации о проблеме, и это структура, я бы посоветовал следующие шаги:
- Сплит каждая строка в двух, прямо перед вторым рисунком.
- Захватите желаемую часть из каждой строки.
- Рекомбинируйте линии так, чтобы совпадения находились на их исходной строке.
Это означает что-то вроде этого:
- Replace
^(\d*\s*)(\d*\s*)$
с $1\r\n$2
. Просто оставьте \r
, если вы не на окнах, и я сомневаюсь. Возможно, вам стоит подумать о макросе для добавления в конце строки. Это должно быть то, что не включено в остальную часть документа (например, #
). Значение $1
означает замену первой захваченной группы (материал внутри скобок). Поэтому замените его на $1#\r\n$2
.
- Теперь возьмите желаемую длину каждой строки:
(^.{n}).*(#?)
и замените на $1$2
. Это будет захватывать первые символы n
и вставить макрос, если он найден.
- Удалить символы перевода после макроса:
#\r\n
. Удалите их или замените их \0
.
Примечание
- Вам придется фильтровать строки, соответствующие
(^\d*\s*)
первыми.
- Если вы хотите получить еще один макрос, введите
#
в ответ выше. Он не должен содержаться в остальной части файла, по крайней мере, не в конце строки.
- Этот ответ использует обратные ссылки, которые должны быть no problem.
Однопроходная
один проход может быть возможно тоже здесь.
^(\d[\d\s]{n-1})[^\d]*(\d[\d\s]{n-1}).*$
Соответствует этим строкам, если вы извлекаете группу 1 и 2, это будет фильтровать желаемый результат из файла. Просто замените его на $1$2
.
Сопоставьте второй раз с использованием '. {N}'? Не уверен в записной книжке (никогда не использовал ее), но в [tag: grep] вы могли бы просто снова совместить с помощью 'grep -o. \ {N \}', и вы получите желаемый результат. – ShellFish
что вы пытаетесь выразить своим регулярным выражением? почему что-то вроде этого '^. {n}' недостаточно? – bro
@ bro Хорошо. Он будет работать для первой колонки. А второе? Проверьте обновленный вопрос –