조건이 충족되는 경우에만 파일을 검색하고 새 파일을 작성하십시오. 있고 문자열을 검색하고 해당 문자열이 새 파일을

로그 파일이 있고 문자열을 검색하고 해당 문자열이 새 파일을 찾은 경우에만 검색하려고합니다. sed doenst는 어떻게이 작업을 수행 할 수 있습니까?



답변

다음과 같은 경우 단락 평가를 수행하십시오 grep.

grep -q 'search_pattern' /file && : >/newfile
  • grep -qSTDOUT에서 출력을 생성하지 않고 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


답변