使用 awk 或 cut 命令分割字符串时出现问题

使用 awk 或 cut 命令分割字符串时出现问题

我有一个属性文件,其中有一个密码字段(键值对)

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==

相关内容