как удалить некоторые строки в редакторе (Regex) - PullRequest
2 голосов
/ 18 июня 2020

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

строка файла, например:

{"message":"{\"_\":\"user\",\"pFlags\":{\"contact\":true},\"user_flags\":2143,\"id\":702212125,\"access_hash\":\"914250561826\",\"first_name\":\"david\",\"last_name\":\"jones\",\"username\":\"david_d192\",\"phone\":\"051863329875\",\"status\":{\"_\":\"userStatusRecently\"}}","phone":"051863329875","version":"3","type":"unknown","token":"1556189892619764206","p_id":702212125,"username":"david_d192","type":"redis","user_flags":2143,"host":"win",from":"contacts"}
{"index": {"_type": "_doc", "_id": "36GG54F"}}

{"message":"{\"_\":\"user\",\"pFlags\":{\"contact\":true},\"user_flags\":2143,\"id\":702212125,\"access_hash\":\"914250561826\",\"first_name\":\"david\",\"last_name\":\"jones\",\"username\":\"david_d192\",\"phone\":\"051863329875\",\"status\":{\"_\":\"userStatusRecently\"}}","phone":"051863329875","version":"3","type":"unknown","token":"1556189892619764206","p_id":702212125,"username":"david_d192","type":"redis","user_flags":2143,"host":"win",from":"contacts"}
{"index": {"_type": "_doc", "_id": "36GG54F"}}

{"message":"{\"_\":\"user\",\"pFlags\":{\"contact\":true},\"user_flags\":2143,\"id\":702212125,\"access_hash\":\"914250561826\",\"first_name\":\"david\",\"last_name\":\"jones\",\"phone\":\"051863329875\",\"status\":{\"_\":\"userStatusRecently\"}}","phone":"051863329875","version":"3","type":"unknown","token":"1556189892619764206","p_id":702212125,"type":"redis","user_flags":2143,"host":"win",from":"contacts"}
{"index": {"_type": "_doc", "_id": "36GG54F"}}

Я хочу сохранить идентификатор, first_name, last_name, phone, username (если есть) в каждой строке =>

id:702212125 first_name:david last_name:jones phone:051863329875 username:david_d192,
id:702212125 first_name:david last_name:jones phone:051863329875 username:david_d192,
id:702212125 first_name:david last_name:jones phone:051863329875,

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

спасибо

Ответы [ 2 ]

1 голос
/ 18 июня 2020
Оптимальным способом для этого является синтаксический анализ

JSON (https://linuxconfig.org/how-to-parse-data-from-json-into-python). Но вы можете усложнить жизнь и использовать регулярное выражение (здесь представлено в варианте PCRE (PHP)):

Получить все идентификаторы:

(?<=id\":\s\")(\w+)(?=\")

См. Пример: https://regex101.com/r/g5vfEd/1

Получить все имена:

(?<=first_name\\\":\\\")(\w)+(?=\\)

См. Пример: https://regex101.com/r/g5vfEd/2

Получить все фамилии:

(?<=last_name\\\":\\\")(\w)+(?=\\)

См. Пример: https://regex101.com/r/g5vfEd/3

Получить все номера телефонов:

(?<=phone\\\":\\\")(\w)+(?=\\)

См. Пример: https://regex101.com/r/g5vfEd/4

Получить все имена пользователей, если они существуют:

(?<=username\\\":\\\")(\w)+(?=\\)

См. Пример: https://regex101.com/r/g5vfEd/5

полный шаблон для соответствия всему:

id\\?\":\s?\"?(\w+),?[\\\"].*first_name\\\":\\"(\w+).*last_name\\\":\\\"(\w+).*phone\":\"(\d+).*(?=username)?\":\"(\w+).*

Возвращает 3 совпадения, каждое из следующих 5 групп (здесь показано совпадение 1):

Group 1.    85-94   702212125
Group 2.    145-150 david
Group 3.    169-174 jones
Group 4.    285-297 051863329875
Group 5.    454-462 contacts

См. Ссылку: https://regex101.com/r/g5vfEd/6

0 голосов
/ 18 июня 2020

Поскольку вы пометили регулярное выражение и Emeditor, вы можете попробовать это.

Emeditor версии 19.1 и более поздних версий поддерживает группы с именами регулярных выражений, например:

(?<id>expression) 

и именованной обратной ссылкой, используя эту форму:

\k<id>

Итак, шаги:

Найти и заменить (Ctrl-H). Отметьте «Учитывать регистр» и выберите «Регулярные выражения».

Найти:

\\"id\\"[\\":]*(?<id>[^\\":,]*).*?\\"first_name\\"[\\":]*(?<first_name>[^\\":,]*).*?\\"last_name\\"[\\":]*(?<last_name>[^\\":,]*).*?\\"phone\\"[\\":]*(?<phone>[^\\":,]*)(.*?"username"[\\":]*(?<username>[^\\":,]*))?

Заменить на:

id:\k<id>\tfirst_name:\k<first_name>\tlast_name:\k<last_name>\tphone:\k<phone>\tusername:\k<username>

Щелкните стрелку вниз рядом с кнопкой «Извлечь» и выберите «В новый документ». Нажмите кнопку «Извлечь» для вывода в новый файл с разделителями табуляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...