Как найти-заменить текст, который разбит на строки и имеет случайный отступ?

451
breathlessblizzard

У меня есть документ .ICS, который я открыл в блокноте.

При экспорте файла система календаря помечает водяным знаком каждое описание события предложением. Для заполнителя я буду использовать:

This is a placeholder sentence with a web url http://example.com/null/. 

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

Вот моя проблема. Строки ограничены 75 символами в ICS, поэтому файл выглядит примерно так:

DESCRIPTION: .................................. This is a placeholder senten ce with a web url http://example.com/null/. DESCRIPTION: .......... This is a placeholder sentence with a web url http:/ /example.com/null/. DESCRIPTION: ......................................... This is a placeholder sentence with a web url http://example.com/null/. 

Программа прервала предложение, если оно превышало 75 символов, и добавила отступ в один пробел на следующей строке. Это, я полагаю, для машинной читабельности.

Проблема в том, что лишний пробел лишает все функции поиска и замены, которые я знаю, как использовать. Это случайно, разбивает слова, и я не уверен, что делать.

Мне нужно использовать какую-то функцию или, возможно, скрипт, который может игнорировать разрыв строки и отступ. Есть идеи?

1
Вам необходимо восстановить все строки. Простой фильтр - это пара строк C, но он довольно сложен в сценарии - я даже не смог заставить его сделать это «sed», и он делает большинство вещей. Если это только один файл, вы можете найти бинарный редактор, который это сделает (я смог использовать `frhed`, но с трудом). Команда Linux `bbe` работает (` bbe -b '/ \ n /: 2' -e 's / \ n // g'`), но я не могу найти порт Windows. AFH 8 лет назад 0
@ АФХ, я лучше найду обходной путь для этого. Я не в состоянии возиться с системными командами. breathlessblizzard 8 лет назад 0
Просто нашел простой ответ для отдельных файлов: `notepad ++`. В режиме ** расширенного ** соответствия вы можете найти и заменить (пустым) все вхождения `\ n`. Я всегда использую это вместо `блокнота`, но забыл о расширенном режиме поиска. Вы можете легко получить его как [Портативное приложение] (http://portableapps.com/apps). AFH 8 лет назад 0
Как я могу заставить его игнорировать лишнее пространство? Есть ли фильтр или что-то, что я могу использовать? @AFH breathlessblizzard 8 лет назад 0
Я только что сказал вам: ищите _new-line space_. AFH 8 лет назад 0
@AFH Ладно, похоже, это мешает другим блокам текста в файле, аннулирует формат. Есть ли способ найти предложение с аномалией внутри? breathlessblizzard 8 лет назад 0
Не то, что я знаю из. Я могу думать только об удалении _new-line space_, об удалении строк, которые вы хотите удалить, а затем о повторной вставке их с подстановкой регулярного выражения, заменяя `(. )` на `\ 1 \ n`. AFH 8 лет назад 0
@AFH Ах, это будет сложно. ICS использует пробел _new-line_ каждый раз, когда строка превышает 75 символов, что включает в себя другие части описания, которые я не могу изменять. Мне нужно как-то выделить _new-line пробел в этом предложении. Или, возможно, я мог бы выполнить поиск `This is ... (wildcard) ... example.com / null`, что-то, что включает в себя предложение, но не содержит явной ссылки на текст в середине? breathlessblizzard 8 лет назад 0

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

0
TuesusMalnex

Caution at the outset: Work on a copy of the file and be sure about the line breaks (some files have a carriage return and line feed):

You could search this site and read up on JREPL.BAT by dbenham or you could try out this hack on a copy of the file assuming:

a) Your .ICS file is a text file;

b) You only need to do this infrequently;

c) The DESCRIPTION never wraps onto the next line;

In Microsoft Word: highlight all the text (Ctrl+A) then open the find and replace dialogue using Ctrl+H on the keyboard:

Step_1 To find line breaks, type in the find box: "^l " (include the space after the lowercase L)

Step_2 In the replace box, type nothing.

Step_3 Click on replace all.

Step_4 Ctrl+click to the left of each placeholder line that you wish to remove, then press delete. (You could use the macro facility to do this automatically if this whole procedure works for you in general.)

OR you can use your usual tools to delete the placeholders.

Step_5 Save as a .txt file then rename it to .ICS

Это моя проблема. Это не разделяется на одно и то же слово. breathlessblizzard 8 лет назад 0
Я отредактировал свое предложение удалить разрывы строк и пробел TuesusMalnex 8 лет назад 0
Это не похоже на работу. Кажется, Word не принимает ^ l в качестве действительного аргумента поиска. (Word 2013) breathlessblizzard 8 лет назад 0
Выполните действие «Найти и заменить» в Word 2013 следующим образом: (1) Нажмите эти две клавиши вместе на клавиатуре: Ctrl + H; (2) Нажмите «Еще»; (3) Нажмите «Специально»; (4) Нажмите «Разрыв строки вручную» (или нажмите «Пометка абзаца», если это то, что содержится в вашем файле). Теперь вы должны увидеть ^ l (или ^ p) в критериях поиска и замены. TuesusMalnex 8 лет назад 0