![grep은 뒤에 문자가 없는 문자열을 찾습니다.](https://linux55.com/image/166935/grep%EC%9D%80%20%EB%92%A4%EC%97%90%20%EB%AC%B8%EC%9E%90%EA%B0%80%20%EC%97%86%EB%8A%94%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84%20%EC%B0%BE%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
매개변수가 있고 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을 사용하는데, 이 방식을 사용하는 것이 더 쉽습니다( 의 정의는 의 값에 따라 달라집니다).words
params
grep
words
IFS
awk
더 좋을 수도 있습니다:
awk 'BEGIN{RS=" "} !/=/' <<<"$params"
또는:
awk '{for(i=1;i<=NF;i++) if($i !~ /=/) print $i}' <<<"$params"
bash
배열 매개변수를 사용하여 직접 이 작업을 수행할 수 있습니다.
paramsarray=( $params )
echo "${paramsarray[@]/*=*}"