grep은 뒤에 문자가 없는 문자열을 찾습니다.

grep은 뒤에 문자가 없는 문자열을 찾습니다.

매개변수가 있고 params두 개의 변수가 필요합니다. 하나는 params안에 있는 단어용이고 다른 하나는 =안에 없는 단어용입니다.=

params="step1 step2 step3 param1=1 param2=2 param3=3"

test=$(grep -o '\b\w*\=\b\w*' <<<$params)
echo -e "test: " $test

이것은 작동하며 다음을 제공합니다.

param1=1 param2=2 param3=3

그러나 부정 부분은 작동하지 않습니다. grep -o를 사용해야 하는 경우 어떻게 작동하게 합니까?

이것들은 지금까지 효과가 없었습니다

$(grep -o '\b\w*[^\=]*' <<<$params)
$(grep -o '\b\w*[^\=]\b\w*' <<<$params)

답변으로 이것이 필요합니다.

step1 step2 step3

답변1

grep이에 적합하지 않습니다. 만약 너라면~ 해야 하다이를 사용하면 다음이 작동합니다.

grep -Fv = <<<$(printf '%s\n' $params)

만약 너라면~ 해야 하다사용 grep -o:

grep -o '^[^=]*$' <<<$(printf '%s\n' $params)
  • 위의 내용은 bash각각 한 줄에 print from을 사용하는데, 이 방식을 사용하는 것이 더 쉽습니다( 의 정의는 의 값에 따라 달라집니다).wordsparamsgrepwordsIFS

awk더 좋을 수도 있습니다:

awk 'BEGIN{RS=" "} !/=/' <<<"$params"

또는:

awk '{for(i=1;i<=NF;i++) if($i !~ /=/) print $i}' <<<"$params"

bash배열 매개변수를 사용하여 직접 이 작업을 수행할 수 있습니다.

paramsarray=( $params )
echo "${paramsarray[@]/*=*}"

관련 정보