awkまたはcutコマンドを使用して文字列を分割するのに問題があります。

awkまたはcutコマンドを使用して文字列を分割するのに問題があります。

パスワードフィールド(キーと値のペア)を持つプロパティファイルがあります。

PASSWORD=NDhhHcsOBofXUdUzGw5B0Q==

awkコマンドを使用してシェルスクリプトから値を取得しようとしています。

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

しかし、それだけですNDhhHcsOBofXUdUzGw5B0Q

完全なパスワード(最後の2= 文字を含む)が必要です。

答え1

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

答え2

cutすでに行を抽出した場合、適切なツールは次のとおりです。

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

ここでは、2番目のフィールドから最後のフィールドに移動します。

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を変更してください(これは本当にハッキングです):

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

関連情報