2017-02-23 2 views
0

나는 배우려는 bash 스크립트가 있습니다. 내가 나오지도 사용하고 하나 개의 bash는 변수에 암호와 다른 bash는 변수에 (암호)의 값을 저장할RegEx를 기반으로 문자열에서 값 가져 오기

create user myuser with password 'mypassword'; 

: 나는 그 안에있는 SQL 파일이 있습니다. 내가 배우려는 스크립트는 다음과 같습니다.

USERNAME := $(shell sed -n \ 
"s/^create user \(\S\+\) with password '\(\S\+\)';$$/\1/p" \ 
createdb.sql) 
PASSWORD := $(shell sed -n \ 
"s/^create user \(\S\+\) with password '\(\S\+\)';$$/\2/p" \ 
createdb.sql) 

정규식을 시도해도 상관 없습니다. 내 문제의 일부는 sed의 기본을 이해하지 못한다. 문자열 부분의 가치를 얻으려면 어떻게해야합니까?

답변

2

sed을 사용하지 마십시오. bash의 내장 정규 표현식 지원을 사용하십시오.

str="create user myuser with password 'mypassword';" 
regex='create user (.*) with password (.*);' 
if [[ $str =~ $regex ]]; then 
    username=${BASH_REMATCH[1]} 
    password=${BASH_REMATCH[2]} 
fi 

당신이 처음부터 적절한 선을 얻을 방법에 관해서는, grep 사용

str=$(grep "create user" createddb.sql) 
+0

$ str을을이 경우 파일을 것입니까? –

+1

hm ... 외장형'grep'과 bash 내장형 정규 표현식 대신 하나의 외장형 sed + 읽기 대신에? – jm666

+0

당신은 할 수 있겠지만 조금 더 간단합니다. 본질적으로 'IFS'에서'sed'의 출력을 재 작성하도록 사용하기위한 안전한 단일 문자 구분 기호를 제시하기보다는 두 개의 값을 구분하기 위해 다중 문자 구분 기호'with password '를 사용합니다. – chepner

관련 문제