1

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

Пример:

Bob: hi
hey
Martha: yeah hi

Я хочу добавить || перед второй строкой, чтобы это выглядело так:

Bob: hi
||hey
Martha: yeah hi

Могу ли я сделать это для всего более 30 000 строк документа, используя поиск и замену?

4 ответа4

1

Переписано согласно комментарию

  • Ctrl+H
  • Найти что: ^(?![^|\r\n]+\|)
  • Заменить на: ||
  • проверить обернуть
  • проверьте регулярное выражение
  • Заменить все

Объяснение:

^              # beginning of line
  (?!          # negative lookahead, make sure we haven't after:
    [^|\r\n]+  # 1 or more any character that is not pipe or linebreak
    \|         # a pipe
  )            # end lookahead

Замена:

||          # double pipe

Дано:

Bob Stewart|1494043962207|hi
hey
Martha|1494044016655|yeah hi

Результат для данного примера:

Bob Stewart|1494043962207|hi
||hey
Martha|1494044016655|yeah hi

Скриншот

0

Используйте регулярное выражение ^(Bob|Martha).*$ И замените его на $0\r\n|| впоследствии замените ||\r\n (в качестве расширенной замены) просто || , Вы, вероятно, можете сделать это за один шаг.

Это не будет работать для последующих строк. Так, например:

Bob: Hi,
are you there?
I only need minute!

Поставил бы только || перед второй линией. Построить отрицание может быть довольно сложно.

0

Предполагая, что всегда первое слово содержит : вы можете использовать что-то вроде:

awk '$1!~":"{printf "||"} {print}' filename
0

Я должен был быть более точным о том, как это отформатировано сейчас в моем примере.

Боб | 1494043962207 | Привет, эй, Марта | 1494044016655 | Да, привет

Вот как это на самом деле выглядит сейчас - я пытался изменить ваш метод, чтобы заставить его работать, но я не мог его получить. Что именно мне нужно изменить?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .