Problema al dividir una cadena usando el command awk o cut

Tengo un file de properties que tiene un campo de contraseña (par de valor key)

PASSWORD=NDhhHcsOBofXUdUzGw5B0Q== 

Estoy tratando de get el valor en mi script de shell usando el command awk

 password=`awk -F "=" '{if($1 == "PASSWORD") print $2}' "$PASSWORD.ini"` 

Pero solo recupera NDhhHcsOBofXUdUzGw5B0Q .

Necesito la contraseña completa (incluidos los dos últimos = caracteres).

 password=$(sed -n 's/^PASSWORD=//p' < "$PASSWORD.ini") 

cut sería la herramienta adecuada aquí si ya tiene la línea extraída:

 $ echo 'PASSWORD=NDhhHcsOBofXUdUzGw5B0Q==' | cut -d= -f2- NDhhHcsOBofXUdUzGw5B0Q== 

Aquí, estás tomando campos desde el 2do hasta el final.

GNU grep con expresiones regulares de Perl también funcionaría:

 pw=$(grep -oP '^PASSWORD=\K.*' < filename) 

Usando awk:

 password=$(awk 'sub(/^PASSWORD=/,"")' < "$PASSWORD.ini") 

Usar awk no está limitado a dividir en caracteres individuales. Entonces puedes dividir en D= por ejemplo o incluso PASSWORD= :

 password=$(awk -F "D=" '{print $2}' $PASSWORD.ini) 

o

 password=$(awk -F "PASSWORD=" '{print $2}' $PASSWORD.ini) 

Hay varias maneras agradables de hacerlo dentro de awk, dependiendo del enfoque particular que más le convenga:

Cambia tu FS:

 $ echo 'PASSWORD=NDhhHcsOBofXUdUzGw5B0Q==' | awk -FPASSWORD= '{print $2;}' NDhhHcsOBofXUdUzGw5B0Q== 

O cambie sus SRO (esto es REALMENTE hacky):

 $ echo 'PASSWORD=NDhhHcsOBofXUdUzGS="="; ORS="=";} {for (i=2;i<NF;i++) print $i}' NDhhHcsOBofXUdUzGw5B0Q== 

La forma robusta y genérica:

 $ echo 'PASSWORD=NDhhHcsOBofXUdUzGw5B0Q==' | awk 'BEGIN {FS="^[^=]+=";} {print $2;}' NDhhHcsOBofXUdUzGw5B0Q== 

o (en el caso de analizar> 1 línea y encontrar la que está buscando):

 $ echo -e 'foo=bar\nPASSWORD=NDhhHcsOBofXUdUzGw5B0Q==\nbaz=quux\n\n' | \ awk 'BEGIN {FS="^[^=]+=";} /^PASSWORD=/ {print $2;}' NDhhHcsOBofXUdUzGw5B0Q== 

Usando Bash:

 while read line ; do case $line in PASSWORD=*) echo "${line#PASSWORD=}" ;; esac done < "$PASSWORD.ini" 

La parte ${variable#text} elimina el text de la variable .

Y aquí está un Perl:

 pw=$(perl -ne 'print $1 if /PASSWORD=(.+)/' "$PASSWORD.ini")