비밀번호 필드(키 값 쌍)가 있는 속성 파일이 있습니다.
PASSWORD=NDhhHcsOBofXUdUzGw5B0Q==
awk
명령을 사용하여 쉘 스크립트에서 값을 얻으려고 합니다.
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를 변경하세요(이건 정말 해킹입니다):
$ 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==