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
누구든지 도와줄 수 있나요? awk
or 을 사용해야 할 것 같습니다 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