문자열이 발견되면 파일 이름 인쇄 [닫기]

문자열이 발견되면 파일 이름 인쇄 [닫기]

file1.txt- , test2.txtfile23.txt이라는 4개의 파일이 있으며 tact24.txt이 파일에서 단어/문자열을 검색하고 싶습니다. 파일 중 하나에서 단어가 발견되면 파일 이름을 인쇄하십시오.

예:

단어 -cat

파일에서 검색 cat-file1.txt test2.txt file23.txt tact24.txt

고양이가 발견되었다고 가정 test2.txt하고 그냥 인쇄하세요.test2

awksed/command를 통해 한 줄로 이 작업을 수행할 수 있습니까 ?

아래를 시도 중이지만 기대한 결과를 얻을 수 없습니다.

grep cat file1.txt test2.txt file23.txt tact24.txt
file1.txt:cat
grep: test2.txt: No such file or directory
grep: file23.txt: No such file or directory
grep: tact24.txt: No such file or directory

grep cat file1.txt test2.txt file23.txt tact24.txt|grep -v "grep"
file1.txt:cat
grep: test2.txt: No such file or directory
grep: file23.txt: No such file or directory
grep: tact24.txt: No such file or directory

답변1

주어진 문자열을 포함하는 파일의 파일 이름을 인쇄합니다(파일 이름 접미사가 있는 경우):

awk '!found[FILENAME]++ && /string/ { fname = FILENAME; sub("\\.[^/]*$", "", fname); print fname }' file1.txt test2.txt file23.txt tact24.txt

이는 현재 파일의 모든 줄에서 문자열을 감지하고 string(여기서는 정규식으로 사용되므로 특수 문자를 이스케이프해야 함) 해당 파일에서 일치하는 항목을 찾을 수 없으면 파일 이름 접미사가 없는 파일 이름이 인쇄됩니다. 파일 이름 접미사는 다음과 같습니다.첫 번째파일 이름에 점. 내가 명령을 작성한 방식은 sub()명령줄에 제공된 경우 파일의 디렉터리 경로를 유지합니다.

파일의 경로 이름을 출력하려면 다음을 사용하십시오.

grep -lF 'string' file1.txt test2.txt file23.txt tact24.txt

이 옵션은 일치 항목이 포함된 파일의 경로 이름 -l만 출력하며 정규 표현식이 아닌 문자열 로 처리됩니다 .grep-Fstring

제공한 파일 이름이 있거나 grep파일 awk이름이 존재하지 않으면 오류가 보고됩니다. 문제를 나타내기 때문에 이러한 오류를 확인하고 싶을 수도 있고 그렇지 않을 수도 있습니다. 보고 싶지 않은 경우 다음으로 리디렉션하세요 /dev/null.

grep -lF 'string' file1.txt test2.txt file23.txt tact24.txt 2>/dev/null

2>"표준 오류 스트림을 다음 위치로 리디렉션"을 의미합니다 .

/dev/nullgrep오류 스트림을 다음으로 리디렉션하는 대신 다음 옵션을 사용하도록 선택할 수 있습니다 -s.

grep -lsF 'string' file1.txt test2.txt file23.txt tact24.txt

관련 정보