password=$(sed -n 's/^PASSWORD=//p' < "$PASSWORD.ini")
Eu tenho um arquivo de propriedades que possui um campo de senha (par de valores-chave)
PASSWORD=NDhhHcsOBofXUdUzGw5B0Q==
Estou tentando obter o valor em meu script de shell usando o comando awk
password='awk -F "=" '{if($1 == "PASSWORD") print $2}' "$PASSWORD.ini"'
Mas recupera apenas NDhhHcsOBofXUdUzGw5B0Q
.
Eu preciso da senha inteira (incluindo os dois últimos caracteres =
).
password=$(sed -n 's/^PASSWORD=//p' < "$PASSWORD.ini")
cut
seria a ferramenta apropriada aqui se você já tiver a linha extraída:
$ echo 'PASSWORD=NDhhHcsOBofXUdUzGw5B0Q==' | cut -d= -f2-
NDhhHcsOBofXUdUzGw5B0Q==
Aqui, você está levando campos do segundo até o fim.
O GNU grep com expressões regulares perl também funcionaria:
pw=$(grep -oP '^PASSWORD=\K.*' < filename)
Usando o awk:
password=$(awk 'sub(/^PASSWORD=/,"")' < "$PASSWORD.ini")
Usando awk
, você não está limitado a dividir em caracteres únicos. Então você pode dividir em D=
por exemplo ou até PASSWORD=
:
password=$(awk -F "D=" '{print $2}' $PASSWORD.ini)
ou
password=$(awk -F "PASSWORD=" '{print $2}' $PASSWORD.ini)
Existem várias maneiras agradáveis de fazer isso no awk, dependendo da abordagem específica que lhe interessa:
Altere seu FS:
$ echo 'PASSWORD=NDhhHcsOBofXUdUzGw5B0Q==' | awk -FPASSWORD= '{print $2;}'
NDhhHcsOBofXUdUzGw5B0Q==
Ou altere o seu ORS (isto é REALMENTE hacky):
$ echo 'PASSWORD=NDhhHcsOBofXUdUzGS="="; ORS="=";} {for (i=2;i<NF;i++) print $i}'
NDhhHcsOBofXUdUzGw5B0Q==
A maneira robusta e genérica:
$ echo 'PASSWORD=NDhhHcsOBofXUdUzGw5B0Q==' | awk 'BEGIN {FS="^[^=]+=";} {print $2;}'
NDhhHcsOBofXUdUzGw5B0Q==
ou (no caso de analisar a linha > 1 e encontrar aquela para a qual você está pesquisando):
$ echo -e 'foo=bar\nPASSWORD=NDhhHcsOBofXUdUzGw5B0Q==\nbaz=quux\n\n' | \
awk 'BEGIN {FS="^[^=]+=";} /^PASSWORD=/ {print $2;}'
NDhhHcsOBofXUdUzGw5B0Q==
Usando o Bash:
while read line ; do
case $line in
PASSWORD=*)
echo "${line#PASSWORD=}" ;;
esac
done < "$PASSWORD.ini"
A parte ${variable#text}
retira o text
do variable
.
E aqui está um Perl:
pw=$(perl -ne 'print $1 if /PASSWORD=(.+)/' "$PASSWORD.ini")
Tags awk shell-script