Используя awk, как заменить слово в файле уникальными значениями? - PullRequest
1 голос
/ 19 февраля 2020

Это файл, который я хочу использовать:

test.txt:

apiVersion: v1
data:
  app_username: something
  app_password: {{RANDOM}}
  another_app_username: something
  another_app_password: {{RANDOM}}

У меня сейчас есть скрипт bash:

test. sh:

random(){
  printf $(openssl rand -base64 15) | openssl base64
}

export -f random

awk '{ 
  gsub(/{{RANDOM}}/, system("random"), $0); printf
}' test.txt

Это выводит:

TVQ3K0hmZmZGMTBPYW9BT0pIbzc=
apiVersion: v1QlBXZzVFNXFUdzBXNzdwdmtWc2w=
data:eDJDcUZKU1U2d1EwaWc5cVhQYUY=
  app_username: somethingay93S3NTNStQKy9jVXFOUHBSZnY=
  app_password: 0NTBJTUpueWRuU1VZYmlWSXZwS0k=
  another_app_username: somethingdzdCWXltMytSUWRFY2RicVh5ZkI=
  another_app_password: 0%

Как видите, он делает что-то . Он удаляет {{RANDOM}}, но не заменяет его. Вместо этого он помещает вывод функции random в конец каждой новой строки.

1 Ответ

2 голосов
/ 19 февраля 2020

Вы можете использовать это так:

awk 'function rndm(cmd, line, r) {
   cmd = "random"
   if ( (cmd | getline line) > 0)
      r=line
   close(cmd)
   return r
}
{
   gsub(/{{RANDOM}}/, rndm())
} 1' file

apiVersion: v1
data:
  app_username: something
  app_password: blBVOFduMzRLSEtSWjlRK0czT1M=
  another_app_username: something
  another_app_password: WWtZb1dWN2tnN0NwZEo1NTB2ZHE=
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...