我有一个属性文件,其中有一个密码字段(键值对)
PASSWORD=NDhhHcsOBofXUdUzGw5B0Q==
awk
我正在尝试使用命令获取 shell 脚本中的值
password=`awk -F "=" '{if($1 == "PASSWORD") print $2}' "$PASSWORD.ini"`
但它只检索NDhhHcsOBofXUdUzGw5B0Q
.
我需要完整的密码(包括最后两个=
字符)。
答案1
password=$(sed -n 's/^PASSWORD=//p' < "$PASSWORD.ini")
答案2
cut
如果您已经提取了该行,那么这里将是合适的工具:
$ echo 'PASSWORD=NDhhHcsOBofXUdUzGw5B0Q==' | cut -d= -f2-
NDhhHcsOBofXUdUzGw5B0Q==
在这里,您将从第二个字段到最后一个字段。
带有 Perl 正则表达式的 GNU grep 也可以工作:
pw=$(grep -oP '^PASSWORD=\K.*' < filename)
答案3
使用 awk:
password=$(awk 'sub(/^PASSWORD=/,"")' < "$PASSWORD.ini")
答案4
根据适合您的特定方法,您可以在 awk 中执行此操作的几种好方法:
改变你的FS:
$ echo 'PASSWORD=NDhhHcsOBofXUdUzGw5B0Q==' | awk -FPASSWORD= '{print $2;}'
NDhhHcsOBofXUdUzGw5B0Q==
或者改变你的ORS(这真的很hacky):
$ echo 'PASSWORD=NDhhHcsOBofXUdUzGS="="; ORS="=";} {for (i=2;i<NF;i++) print $i}'
NDhhHcsOBofXUdUzGw5B0Q==
稳健且通用的方法:
$ echo 'PASSWORD=NDhhHcsOBofXUdUzGw5B0Q==' | awk 'BEGIN {FS="^[^=]+=";} {print $2;}'
NDhhHcsOBofXUdUzGw5B0Q==
或者(在解析 >1 行并找到您要搜索的行的情况下):
$ echo -e 'foo=bar\nPASSWORD=NDhhHcsOBofXUdUzGw5B0Q==\nbaz=quux\n\n' | \
awk 'BEGIN {FS="^[^=]+=";} /^PASSWORD=/ {print $2;}'
NDhhHcsOBofXUdUzGw5B0Q==