Я пишу сценарий bash, для которого в файле, содержащем несколько записей, где каждая запись имеет такую структуру:
Id: 33239
Folder: /Contacts/Holder/Center
Date: 04/17/20 13:17
Revision: 34011
Attrs:
firstName: Name
lastName: First Second
mobilePhone: +345555555
fileAs: 2
jobTitle: Médico
company: some company
email: test_1@somedomain.com
Мне нужно найти «Id» элемента, связанного с Speci c "Электронная почта". Для этого я пытаюсь использовать «сед» с трюмом. Но я не могу достичь своей цели. Это то, что я имею до сих пор, но я не получаю результатов, которые мне нужны.
id=$(grep $usuario -B20 /tmp/contactos \
| grep "Folder: /Contacts/Holder" -B2 -A20 \
| sed -n "/^Id: /h;/^ email: $usuario/{g;p;}" \
| awk '{print $2}')
С этим я пытаюсь:
id=
- присвоить значение переменной, которую я буду использовать позже в скрипте
$(grep $usuario -B20 /tmp/contactos
- Получить все строки в файле, где появляется электронное письмо, а также получить 20 строк до него. Это связано с тем, что электронная почта связана с более чем одним Id
неопределенным числом строк под самим идентификатором.
grep 'Folder: /Contacts/Holder' -B2 -A20
- я снова фильтрую, пытаясь теперь получить только результаты для идентификаторов для это письмо в указанном c «пути к папке».
sed -n '/^Id: /h;/^ email: $usuario/{g;p;}
- эта часть не работает, и я не знаю, как это исправить. Здесь я пытаюсь вернуть строку, содержащую Id:
, связанную с письмом. Что-то вроде: Id: 33239
в этом примере.
awk '{print $2}')
- только я пытаюсь напечатать только число из этой строки (33239
).
Может кто-нибудь помочь, пожалуйста, чтобы понять, как Я могу сделать это с помощью sed` или, если будет предоставлен любой другой вариант, это также будет приветствоваться:)
Большое спасибо!