grep 출력에서 ​​공백 및 기호 제거

grep 출력에서 ​​공백 및 기호 제거

이 작은 스크립트를 사용하여 임의의 비밀번호를 생성하려고 합니다.

#!/bin/bash if [ -z $PASSWORD ]; then PASSWORD=$(date | md5sum | grep '[a-zA-Z1-9]') fi

그러나 이는 다음과 같은 결과를 낳습니다.

15d020e6e8e6038ffb027323401ca9a9 -

내 비밀번호 필드에는 공백이나 기호가 포함될 수 없으며 표준 bash 명령은 베어 Docker 환경에서 실행되므로 사용하고 싶습니다.

어떻게 해결할 수 있나요? 나는 grep -o를 시도했지만 성공하지 못했습니다.

답변1

PASSWORD=$(date | md5sum | grep -o '[a-z0-9]*')

남자 grep:

>    Repetition
>        A  regular  expression  may  be  followed  by one of several repetition
>        operators:
>        ?      The preceding item is optional and matched at most once.
>        *      The preceding item will be matched zero or more times.

추신: 이것은 매우 안전하지 않은 비밀번호 생성입니다. 사용하는 것이 더 좋습니다보편적인 뿌리또는비밀번호.

답변2

출력에서 실제 요약을 구문 분석하는 방법에는 여러 가지가 있습니다 md5sum.

  1. grep -E -o '[[:alnum:]]+', 이는 출력의 영숫자 부분을 반환 md5sum하지만 출력에 있는 경우 파일 이름 비트도 제공합니다(파일 이름이 표준 입력이므로 질문의 경우는 아님 -).
  2. cut -d ' ' -f 1, 첫 번째 공백 문자 앞의 출력 비트만 반환합니다. 이는 틀림없이 "네이키드" MD5 다이제스트 문자열을 얻는 가장 일반적인 방법입니다.
  3. 테마의 변형에는 다음과 같은 것이 cut포함됩니다 .awk '{ print $1 }'

pwgen비밀번호 생성의 경우 MD5 다이제스트 대신 MD5 다이제스트를 사용하는 것이 좋습니다 . 주로 MD5 다이제스트(임의 데이터에서 계산되지 않는 한)가 무작위가 아니기 때문입니다.

해커는 다음과 같은 것을 사용할 수 있습니다.

tr -dc '[:alnum:]' </dev/urandom | dd bs=1 count=32 2>/dev/null

그러면 영숫자 문자 스트림이 추출되고 /dev/urandom해당 dd문자 32개 이후의 스트림이 끊어집니다. 그 반대 dd도 사용할 수 있습니다 head -c 32.

또는 다음을 사용하십시오 md5sum(이 경우 1Kb 이상의 임의 데이터 /dev/urandom).

dd if=/dev/urandom bs=1k count=1 | md5sum | cut -d ' ' -f 1

하지만 실제로는 pwgen.

당신은 또한 볼 수 있습니다/dev/random과 /dev/urandom을 사용하는 경우

관련 정보