Vamos supor que eu receba a seguinte saída depois de executar um script bash na CLI (para que este texto seja exibido no terminal):
POST https://mycompany.com/ COOKIE='BLABLABLABLABLA' HOST='ANYIPADDRESS' FINGERPRINT='sha256:BLABLABLABLA'
Como posso armazenar o conteúdo de
COOKIE
(somente o texto entre'
e'
) em um arquivo separado?
Além disso, o texto mencionado deve ser colado neste arquivo externo em uma posição específica.
O conteúdo do arquivo já existente se parece com isso:
[global] Name = Name of VPN connection [provider_openconnect] Type = OpenConnect Name = Name of VPN connection Host = IP-address Domain = Domain name OpenConnect.Cookie = >>>INSERT CONTENT OF THE COOKIE HERE<<< OpenConnect.ServerCert = sha256:BLABLABLABLA
Como isso é possível?
Esses tipos de coisas não são de natureza genérica, mas a abordagem específica é genérica
Estou supondo que você deseja substituir a
OpenConnect.Cookie =
linha porOpenConnect.Cookie = BLABLABLABLABLA
Então, para primeiro criar a string necessária, você pode usar
Aqui estou usando a substituição de comando para primeiro criar a string necessária
e, em seguida, substituindo a linha necessária por esta string necessária
Você pode ler o cookie usando uma combinação de read e
grep
:Isso usa substituição de processo para alimentar a saída de
some-command | grep '^COOKIE')
toread
. ComIFS="='"
, dividimos a entrada em'
, descartando o primeiro elemento da divisão (COOKIE=
) (e qualquer texto restante após as aspas de fechamento), enquanto salvamos o segundo nacookie
variável.Então podemos usar
sed
para substituir o texto:Isso depende do texto do cookie que não contém caracteres especiais como
&
, no entanto.Você poderia usar:
Onde:
file
é o arquivo existente com conteúdo conforme descrito na pergunta.command
é o seu comando que imprime o texto no terminal.grep "^COOKIE="
procura uma linha começando comCOOKIE=
$COOKIE
é definida no shell atual.sed
comando então substitui a linha no arquivo de destino pelo conteúdo da variável$COOKIE
.Que tal
Ele cria um "
sed
arquivo de script" em tempo real extraindo / massageando os dados relevantes do seu comando CLI e executa esse arquivo de script usando "substituição de processo" em uma segundased
chamada.Esta resposta é baseada no comentário de @MSalters . O shell usado é o Bash.
Solução alternativa (usando GNU
expr
)Esta solução funciona se houver apenas um resultado correspondente.