Соответствие только числам, которые идут в числовом порядке

232
Geremia

У меня есть цифры в [.], Обозначающие номер страницы оригинального печатного документа, который я переписываю. Тем не менее, документ также содержит другие цифры в [.], Которые не соответствуют номерам страниц.

Например:

Lorem Ipsum Dolor Sit Amet, Concetetur Adipiscing Elit. Donec a diam lectus. Sed sit amet ipsum mauris. Maecenas congue ligula ac quam viverra nec consectetur ante hendrerit. Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia coectetur. Donec ut libero sed arcu vehicleula обвиняет не мучителей. Lorem Ipsum Dolor Sit Amet, концертный наряд [267]Элит. Aenean Ut Gravida Lorem. Ut turpis felis, pulvinar semper sed, adipiscing id dolor. Pellentesque auctor nisi id magna remaquat сагиттис. Curabitur dapibus enim sit amet elit pharetra tincidunt feugiat nisl imperdiet. Ut convallis libero в урне ultrices accumsan. Donec sed odio eros. Donec viverra mi quis quam pulvinar at malesuada arcu rhoncus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. В рутрум аккумсан язвах. Mauris vitae nisi at sem facilisis semper ac in est.

Vivamus Fermentum Semper Porta. Nunc diam Velit, Adipiscing Ut Tristique Vitae, Сагиттис Вел Одио. Maecenas convallis ullamcorper ultricies. Curabitur ornare, Ligula Semper Concectetur Sagittis, Nisi Diam Iaculis Velit, id [1] Fringilla Sem Nunc Vel Mi. Nam dictum, odio nec pretium volutpat, arcu ante placerat erat, non-tristique elit urna et turpis. Quisque mi metus, ornare sit amet fermentum et al., Tincidunt et orci. Fusce eget orci a orci congue vestibulum. Ut dolor diam, elementum et vestibulum eu, porttitor vel elit. Curabitur venenatis pulvinar tellus gravida ornare. Sed et erat faucibus nunc euismod ultricies ut id justo. Nullam cursus suscipit nisi, et ultrices justo sodales nec. Fusce venenatis facilisis lectus ac semper. Аликвам в Масса Ipsum. Quisque Bibendum Purus[2] ultrics ultriculall nulla ultrices. Nullam aliquam, mi eu aliquam tincidunt, purus velit laoreet tortor, viverra pretium nisi quam vitae mi. Fusce vel Volutpat Elit. Нам сагиттис ниси дуй.

Suspendisse lectus leo, consctetur in tempor sit amet, placerat quis neque. Etiam luctus porttitor [1] lorem, sed suscipit est rutrum non. Curabitur lobortis nisl aim congue semper. Энеевский коммодот ультрикс. [3]Vestibulum ut justo vel sapien venenatis tincidunt. Phasellus eget dolor sit amet ipsum dapibus condimentum vitae quis lectus. Аликвам ут масса в Turpis Dapibus Convallis. Praesent elit lacus, вестибюль у malesuada и др., Ornare и др. Ut augue nunc, sodales ut euismod non, adipiscing vitae orci. Mauris ut placerat justo. Морис в ультирецах еним. Quisque nec elestnd nulla ultrices egestas quis ut quam. Donec sollicitudin lectus a mauris pulvinar id aliquam urna cursus. Cras quis ligula sem, vel elementum mi. Фазелла не ullamcorper урна. [24]

Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. При язвенной болезни. Vestibulum porta sapien adipiscing augue congue id pretium lectus molestie. Proin quis dictum nisl. Morbi id quam sapien, sed vestibulum sem. Duis elementum rutrum mauris sed convallis. Proin vestibulum magna mi. Aenean tristique hendrerit magna, [5] ac facilisis nulla hendrerit ut. Sed non tortor sodales quam auctor elementum. Donec hendrerit nunc eget elit pharetra pulvinar. Suspendisse ID Tempus пытки. Aenean luctus, elit Goodso Laoreet Commodo, Justo Nisi Conquat Massa, Sed Vulputate Quam Urna Quis Eros. Донецк вел.

Я хотел бы последовательно заменить все [.], Которые являются номерами страниц, в TeX \marginpar{[.]}, но игнорировать любые числа, которые не в последовательности.

Итак, я бы хотел, чтобы sedили emacsаналогичная утилита соответствовала приведенному выше примеру тому, что я выделил жирным шрифтом здесь:

[267] [1] [2] [1] [3] [24] [5]

Таким образом, я хотел бы сопоставить только то, что находится в числовом порядке.

Как я мог это сделать?

1
Для пояснения, `[24]` идет в числовом порядке после `[3]`, но намерение не в том, чтобы соответствовать `[24]`, а в том, чтобы совпадать с `[5]`, что также идет после `[3]` и тоже не сразу после `[3]`? Какова будет терпимая разница для матча? Если разница в 2 - это нормально, то разница в 3 также в порядке? Simon 10 лет назад 1
@ Симон: Любая разница ≥2 должна быть отклонена, хотя было бы неплохо иметь возможность явно указать и такой порог. Geremia 10 лет назад 0
Я думаю, что "awk" может сделать то, что я ищу. Geremia 10 лет назад 0

1 ответ на вопрос

2
Simon

awkможет, конечно, сделать это. Например, скрипт subpar.awk:

BEGIN {  maxgap = ARGV[1] ARGV[1] = "-" count = 0  }  { i = count + 1 while (i <= count+maxgap) { n = sub("\\[" i "\\]","\\marginpar{[" i++ "]}") count += n } print } 

... может обработать текст примера как awk -f subpar.awk 2 <lorem.txt, где параметр 2- максимально допустимая разница в последовательности. sub()возвращает количество выполненных замен (0 или 1), поэтому countувеличивается только тогда, когда в строке была произведена замена. Этот код имеет дело со случаем, когда в строке должно быть выполнено более одной замены.

Единственное, по какой-то причине я должен сделать maxgap очень большим… Geremia 10 лет назад 0
Для теста достаточно maxgap = `2`. Единственная причина, по которой он будет значительно увеличен, состоит в том, что в последовательности имеется гораздо больший подлинный разрыв, что кажется маловероятным в контексте. Насколько большим вам нужно было это сделать, и какова была последовательность чисел в скобках в этом случае? Simon 10 лет назад 0
Я запускал именно `awk -f subpar.awk 2 Geremia 10 лет назад 0
Я бы предложил вставить следующий код в строку после `while (i <= count + maxgap) {`: `print" Поиск ["i"] "`, которое должно точно сказать, какой номер страницы ищет скрипт в любой момент. Затем вы можете сравнить текст, который он ищет (но не находит), с текстом, который вы ожидаете найти в следующем абзаце, и посмотреть, есть ли какие-либо различия. Simon 10 лет назад 0

Похожие вопросы