awk 또는 cut 명령을 사용하여 문자열을 분할하는 데 문제가 있습니다.

awk 또는 cut 명령을 사용하여 문자열을 분할하는 데 문제가 있습니다.

비밀번호 필드(키 값 쌍)가 있는 속성 파일이 있습니다.

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

관련 정보