"wget" 출력에서 ​​텍스트 일부를 선택하고 파일에 기록하시겠습니까?

"wget" 출력에서 ​​텍스트 일부를 선택하고 파일에 기록하시겠습니까?

FTP 사이트를 테스트하기 위한 다음과 같은 작은 스크립트가 있습니다.

#!/bin/bash

wget -O /dev/null ftp://someftpsite:[email protected]/testdump300 2>&1 | \
   grep '\([0-9.]\+ [M]B/s\)' >> wget300.log

표시되는 출력은 다음과 같습니다.

2018-07-26 22:30:06 (22.7 MB/s) - '/dev/null' saved [104857600]

좋아요, 이제 저는 다음과 같은 것을 원합니다:

2018-07-26 22:30:06 22.7

누구든지 도와줄 수 있나요? awkor 을 사용해야 할 것 같습니다 sed.

답변1

사용 awk:

$ wget -O /dev/null ftp://someftpsite:[email protected]/testdump300 2>&1 | \
   awk '/[0-9]+ [M]B\/s/{ sub("\\(",""); print $1,$2,$3 }' >> wget300.log

이렇게 하면 정규식 패턴을 검색할 grep필요가 없어집니다. 속도 앞의 것을 awk삭제 한 다음 열 1, 2, 3(날짜, 시간 및 속도)을 인쇄합니다.(

답변2

사용하는 대안은 다음과 같습니다 sed.

$ wget -O /dev/null ftp://someftpsite:[email protected]/testdump300 2>&1 | \
   sed 's/(//;s/ [[:alpha:]]\+\/s.*$//' >> wget300.log

작동 방식:

  • s/(//;- 첫 번째 브래킷 제거
  • s/ [[:alpha:]]\+\/s.*$//- space+ 'MB/s'부터 끝까지 모두 삭제합니다 .*$.

그것을 사용하는 또 다른 방법 perl:

$ wget -O /dev/null ftp://someftpsite:[email protected]/testdump300 2>&1 | \
   perl -lne 'print "$1 $2" if /^(.*)\s\((\S+)/' >> wget300.og

작동 방식:

  • Perl 괄호로 묶인 내용은 모두 저장되므로 변수 $1$2저장됩니다. 이 경우 두 번째 변수에서 space+ 괄호 앞의 모든 항목(+ 괄호 제외) $1과 여는 괄호 뒤의 모든 항목(공백 제외)을 일치시킵니다 .\S+$2

관련 정보