Как вставить новую строку 3 пробела или 2 слова перед конкретным символом - PullRequest
1 голос
/ 10 августа 2010

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

Джон Смит> Привет Джейн Доу> Эй, как дела?Джон Смит> Довольно хорошо, спасибо

, и она хочет отформатировать это так:

Джон Смит> привет

Джейн Доу> Привет, как дела?

Джон Смит> Довольно хорошо, спасибо

Недостаточно просто ввести новую строку после>, так как она не будет правильно отформатирована, поэтому мне нужно вставить новую строку, 3 пробела или 2слова перед ">", поэтому имя тоже записывается.

Пока у меня есть только новая строка после>:

/ usr / bin / perl -p -i -e "s /> /> \ n / g "* .txt

Редактировать: задействовано более 20 разных имен чатов, поэтому было бы здорово сделать это без ввода всех их имен, так как они могут различаться, и яЯ хотел бы поучиться на упражнение для удовольствия.Спасибо за чтение

Ответы [ 2 ]

1 голос
/ 10 августа 2010

Попробуйте это:

perl -p -i -e "s/(\w+\s\w+\s*>)/\n\1/g" log.txt

Тест, который я использовал для регулярного выражения:

[21:21:23] ~ $ echo 'John Smith > hello Jane doe > hey how are you? John Smith > Pretty good thanks Susie Someone > hi guys' > log.txt
[21:21:24] ~ $ more log.txt 
John Smith > hello Jane doe > hey how are you? John Smith > Pretty good thanks Susie Someone > hi guys
[21:21:27] ~ $ perl -p -i -e "s/(\w+\s\w+\s>)/\n\1/g" log.txt
[21:21:34] ~ $ more log.txt 

John Smith > hello 
Jane doe > hey how are you? 
John Smith > Pretty good thanks 
Susie Someone > hi guys
[21:21:37] ~ $ 

Он добавляет дополнительную новую строку в начало файла, но если это вас не беспокоит, думаю, это должно сработать.

Редактировать: Также произойдет сбой, если кто-то по какой-либо причине использовал символ > в одном из своих сообщений (если ему предшествовал пробел и два слова, в любом случае).

0 голосов
/ 10 августа 2010

Я знаю, что у вас уже есть сценарий, который "достаточно хорош".Но я все равно решил предложить альтернативную стратегию.

Выполнить эту задачу в два этапа.

Часть первая: проанализировать исходные данные и извлечь список имен пользователей.

  • Ищите повторяющиеся группы слов (длиной до X), которые предшествуют >.
  • . Сформируйте список возможных имен пользователей.

Здесь человеквходит и утверждает список имен пользователей.

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

  • Обработка файла и сопоставление имен пользователей для использования в качестве разделителей

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

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

...