답변1
grep을 grep으로 파이프할 필요는 없습니다(이것은 거의 항상 비효율적이고 잘못된 접근 방식을 취하고 있다는 신호입니다. sed
이 작업에는 단독으로도 충분합니다. 또는 awk
. 또는 perl
). 이는 sudo su root cat
말도 안되는 소리입니다.
이 시도:
$ sudo sed -n -E -e '/sshd.*authentication failure/{s/^.*rhost=([0-9.]+).*/\1/p}' \
/media/sf_partageAuth/auth.log > /mnt/analyse/traitement/cueillette.txt
"인증 실패"와 일치하는 모든 줄에 대해(참고,~ 아니다"진짜fication"), 이 sed
스크립트는 줄의 시작부터 (및 포함)까지의 모든 항목 rhost=
과 IP 주소 뒤의 모든 항목을 제거한 다음 해당 줄을 인쇄합니다.
확장 정규 표현식에 sed
' 옵션을 사용하므로 이스케이프할 필요 없이 작동합니다 .-E
()
+
sed
를 사용하여 명령이 루트로 실행되는 동안 sudo
출력 리디렉션은 수행되지 않습니다. 루트가 아닌 원래 셸에서 수행됩니다. 출력 파일에도 쓰기 위해 루트 권한이 필요한 경우 다음과 같이 실행 tee
하십시오 sudo
.
$ sudo sed -n -E -e '/sshd.*authentication failure/{s/^.*rhost=([0-9.]+).*/\1/p}' \
/media/sf_partageAuth/auth.log |
sudo tee /mnt/analyse/traitement/cueillette.txt > /dev/null