로그 파일이 있고 문자열을 검색하고 해당 문자열이 새 파일을 찾은 경우에만 검색하려고합니다. sed doenst는 어떻게이 작업을 수행 할 수 있습니까?
답변
다음과 같은 경우 단락 평가를 수행하십시오 grep
.
grep -q 'search_pattern' /file && : >/newfile
-
grep -q
STDOUT에서 출력을 생성하지 않고0
패턴이 파일에서 발견되면 종료 상태로 종료 됩니다. -
패턴이 발견되면 (
&&
) 파일/newfile
을 기준 으로 파일 을 작성하십시오: >/newfile
.
일반적인 touch /newfile
접근 방식을 사용하거나 bash
빈 리디렉션 >/newfile
을 수행 할 수도 있습니다.
참고로 파일이 이미 존재 touch
하면 파일을 자르지 않고 관련 타임 스탬프 만 변경합니다. 그리고 EOF를 수동으로 보내야하는 >/newfile
모든 쉘 (예 :에서 zsh
) 에서는 빈 리디렉션 이 지원되지 않습니다 .
답변
재미로:
python3 -c "if 'string' in open('logfile').read(): open('newfile', 'wt')"
여기서 'string'
문자열 (조건) 'logfile'
로 바뀌고 로그 파일의 경로로 'newfile'
바뀌며 예제의 모든 따옴표로 작은 따옴표로 묶을 파일의 실제 경로로 바뀝니다.
답변
system()
명령 과 함께 awk를 사용할 수 있습니다 . 이 경우 /pattern/
발견되면, 코드 블록은 {}
우리가 부르는 경우에 실행됩니다 touch /tmp/my_file.txt
를 통해 system()
명령.
아래 예는 내 사용자가있는 경우 임시 파일을 만드는 것을 보여줍니다 /etc/passwd
.
$ awk '/xieerqi/{system("touch /tmp/my_file.txt")}' /etc/passwd
$ ls -l /tmp/my_file.txt
-rw-rw-r-- 1 xieerqi xieerqi 0 1月 25 07:58 /tmp/my_file.txt
또는 파일로 리디렉션을 사용할 수 있습니다.
awk '/xieerqi/{f="/tmp/my_file.txt";print "" > f;close(f)}' /etc/passwd
답변
새로운 빈 파일을 원하는지 또는 파일을 만들기 위해 더 복잡한 처리가 필요한지 여부는 말하지 않습니다.
전자의 경우 @heemayl의 답글이 표시됩니다.
그렇지 않으면 if 문을 사용하십시오.
if grep -q 'search_pattern' /file
then
# Create your file here
fi