#powershell #cmd
#powershell #cmd
Вопрос:
Итак, я пытаюсь извлечь определенную строку из нескольких файлов json и создать текстовый файл и добавить эти извлеченные строки в этот текстовый файл
Здесь каждый файл json выглядит как
{
"type": "service_account",
"project_id": "mm-sxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"private_key_id": "01xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"private_key": "-----BEGIN PRIVATE KEY-----nMIIEvQIBADAhnk9P8vIQogdfdIxxxxxxx/9FqnwxeBX5Wk CRXvklQQP37TDM=n-----END PRIVATE KEY-----n",
"client_email": "mm-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxqr.iam.gserviceaccount.com",
"client_id": "1xxxxxxxxxxxxxxxxxxxxxxxxxxx",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/mm-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxqr.iam.gserviceaccount.com"
}
Каждый файл json имеет этот шаблон
Что меня интересует, так это эта строка "client_email": "mm-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxqr.iam.gserviceaccount.com",
Мне просто нужно электронное письмо из этой строки, т. Е. В этом случае mm-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxqr.iam.gserviceaccount.com
Я пытаюсь добиться этого в Powershell
Я попробовал решение ниже
(Select-String -Path *json -Pattern 'client_email').Line | Set-Content AllSAEmails.txt
Это создало текстовый файл со следующим шаблоном
"client_email": "mm-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxqr.iam.gserviceaccount.com",
"client_email": "mm-yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyas.iam.gserviceaccount.com",
"client_email": "mm-zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzae.iam.gserviceaccount.com",
"client_email": "mm-qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqquh.iam.gserviceaccount.com"
Но меня интересует, как показано ниже, возможно ли создать текстовый файл с этим шаблоном?
Итак, поскольку у меня есть несколько json..у каждого из json есть такое электронное письмо .. я бы хотел, чтобы все эти электронные письма находились внутри текстового файла, разделенного запятой
mm-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxqr.iam.gserviceaccount.com,
mm-yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyas.iam.gserviceaccount.com,
mm-zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzae.iam.gserviceaccount.com,
mm-qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqquh.iam.gserviceaccount.com
Любая помощь будет оценена
Спасибо
Ответ №1:
Используйте ConvertFrom-Json
для разбора файла, тогда остальное становится тривиальным:
$emails = Get-ChildItem .*.json |Get-Content -Raw |ConvertFrom-Json |Select -ExpandProperty client_email
Если вы хотите выводить электронные письма в файл и вставлять разрыв строки каждые 10 строк, вы могли бы сделать что-то вроде:
@(
for($i = 0;$i -lt $email.Length ;$i = 10){
# output 10 emails and a blank string
$emails[$i..($i 9)]
""
}
) |Set-Content .pathtofile
Комментарии:
1. Это просто потрясающе .. я протестировал это, и это сработало хорошо .. у меня также есть небольшой запрос .. могу ли я добавить пустую строку после каждых 10 lines..is это также можно добавить в ту же команду, что и выше, благодаря @Mathias R. Jessen
2. Вы имеете в виду, что если вы впоследствии выводите
$emails
в файл, вам нужен разрыв строки для каждых 10?3. да, точно
$emails = Get-ChildItem .*.json |Get-Content -Raw |ConvertFrom-Json |Select -ExpandProperty client_email >>emails.txt
я использовал это для создания файла