여러 grep 출력을 하나의 변수로 결합

여러 grep 출력을 하나의 변수로 결합

기본적으로 다음과 같은 시나리오가 있습니다.

  1. grep 'test: \K(\d+)' $file=> 15
  2. grep 'test1: \K(\d+)' $file=> 20

예를 들어 쉼표를 구분 기호로 사용하여 두 명령의 결과를 변수에 저장하는 방법이 있습니까?

Test="grep 'test: \K(\d+)' $file;grep 'test1: \K(\d+)' $file"

대답 =eval $Test

예상 출력: 15,20?

답변1

예, 다음을 사용하여 그렇게 할 수 있습니다.명령 대체:

Test="$(grep 'test: \K(\d+)' $file),$(grep 'test1: \K(\d+)' $file)"

변수 = $(..)호출됨명령 대체이것이 의미하는 바는 쉘 명령을 실행하고 그 출력을 변수에 저장하거나 echo명령을 사용하여 다시 표시하는 것입니다. 예를 들어 날짜와 시간을 표시하려면 다음을 수행하세요.

echo "Today is $(date)"

변수에 저장합니다.

SERVERNAME="$(hostname)"

출력에 연결할 수 있습니다.

echo "$(hostname),$(date)"

결과는 다음과 같습니다:

yourhostname,Tue Jan 24 09:56:32 EET 2017

답변2

명령의 출력을 변수에 넣으려면 다음을 사용하십시오.명령 대체, 이것이 바로 그것이 사용되는 것입니다. 사용해도 eval도움이 되지 않습니다(올바르게 사용해도 이당신은 그렇지 않다).

Test="$(grep 'test: \K(\d+)' "$file"; grep 'test1: \K(\d+)' "$file")"

출력은 개행으로 구분된 두 개의 숫자입니다(각 패턴이 정확히 한 번 일치한다고 가정). 줄 바꿈으로 구분되는 이유는 grep이 다른 도구와 마찬가지로 줄을 출력하고 줄이 항상 줄 바꿈으로 끝나기 때문입니다. 첫 번째는 grep끝에 개행을 인쇄하고, 두 번째는 끝에 개행을 인쇄한 다음, 바꾸기 명령은 끝에 있는 개행을 제거합니다. 쉼표를 구분 기호로 사용하려면 두 명령 대체를 두 명령 사이에 쉼표로 사용하세요.15grep20

Test="$(grep 'test: \K(\d+)' "$file"),$(grep 'test1: \K(\d+)' "$file")"

관련 정보