첫 번째 작업은 해당 라인에서 요율을 추출하는 것입니다. GNU grep (포함되지 않은 Linux 또는 Cygwin)을 사용하면이 -o
옵션을 사용할 수 있습니다 . 원하는 부분은 숫자 만 포함하고 그 뒤에 %
부호 가있는 부분 입니다. %
자체 를 추출하지 않으려면 너비 가 0 인 lookahead assertion 과 같은 추가 트릭이 필요합니다 %
.
command1 -p=aaa -v=bbb -i=4 | grep -o -P '[0-9]+(?=%)'
또 다른 가능성은 sed를 사용하는 것입니다. sed에서 행의 일부를 추출하려면 s
전체 행과 일치하는 정규식 (로 시작 ^
하고로 끝나는)과 함께 명령을 사용하여 $
그룹으로 유지할 부분 ( \(…\)
)을 사용하십시오. 전체 줄을 유지할 그룹의 내용으로 바꿉니다. 일반적으로, -n
기본 인쇄를 끄고 p
추출 할 항목이있는 행을 인쇄 하도록 수정자를 배치 하는 옵션을 전달하십시오 (여기서는 단일 행이 있으므로 중요하지 않음). 참조 일치하는 패턴 후 라인의 부분 만 반환 하고 주변의 문자를 인쇄하지 않고 '나오지도'와 일치하는 정규식 추출 더 나오지 트릭을.
command1 -p=aaa -v=bbb -i=4 | sed 's/^.*rate(\([0-9]*\)%).*$/\1/'
sed보다 더 융통성이 있습니다. Awk는 작은 명령형 언어로 각 줄에 대한 명령을 실행합니다. 요율을 추출하는 방법은 여러 가지가 있습니다. 두 번째 필드 (기본적으로 공백은 공백으로 구분됨)를 선택하고 숫자가 아닌 모든 문자를 제거합니다.
command1 -p=aaa -v=bbb -i=4 | awk '{gsub(/[^0-9]+/, "", $2); print $2}'
이제 속도를 추출 했으므로 다음 단계는에 인수로 전달하는 것 command2
입니다. 이를위한 도구는 명령 susbtitution 입니다. 명령을 안에 넣는 경우 $(…)
(달러 괄호), 해당 출력이 명령 행으로 대체됩니다. 명령의 출력은 각 공백 블록에서 개별 단어로 분리되며 각 단어는 와일드 카드 패턴으로 처리됩니다. 이런 일이 일어나지 않기를 원한다면, 명령어 치환에 큰 따옴표를 넣으십시오 : "$(…)"
. 큰 따옴표를 사용하면 명령 출력이 단일 매개 변수로 직접 사용됩니다 (출력 끝의 줄 바꿈이 제거되는 유일한 변환입니다).
command2 -t "$(command1 -p=aaa -v=bbb -i=4 |
sed 's/^.*rate(\([0-9]*\)%).*$/\1/')"