하위 폴더에서 단어 발생 찾기

하위 폴더에서 단어 발생 찾기

안녕하세요, 저는 하위 폴더에 있는 모든 단어를 찾으려고 합니다. 이것이 쉬운 것처럼 보이지만, 각 항목에 대해 경로와 파일 이름, "-> Line:" 및 해당 항목을 포함하는 줄 번호를 표시하고 싶습니다.

예를 들어: example/example/file.png -> Line: 25

이 작업을 시도했지만 grep -rnl 'word' subfolder/ | sed 's/$/ -> Line : /'끝 부분에 줄을 인쇄하는 방법을 찾을 수 없습니다. 다음은 이 명령을 사용하여 얻는 결과의 예입니다. ( example/example/file.png -> Line:)

도움을 주셔서 미리 감사드립니다.

답변1

존재하다grep -rnl 'word' subfolder/, -n 그리고 갈등 -l. 파일 이름( -l)만 인쇄할지 아니면 모든 일치 항목을 줄 번호( )와 함께 인쇄할지 결정해야 합니다 -n.

따라서 후자를 의미한다고 가정하면 grep -rn pattern folder/다음과 같이 인쇄됩니다.

folder/file:4:line with pattern
folder/file:with:colon:12:other pattern line
folder/subfolder:with:colon/file
with
newline:12:pattern again

분명히 줄 번호를 추출할 수 있는 방법은 없습니다.

:이는 파일 경로에 개행 문자가 포함되거나 포함되지 않음을 보장할 수 있는 경우에만 수행할 수 있습니다 . 어쩌면 다음과 같은 것이 있을 수도 있습니다:

grep -rn pattern folder/ |
  LC_ALL=C sed 's/^\([^:]*\):\([^:]*\)\(.*\)/\1\3 -> Line: \2/'

이를 안정적으로 수행하려면 파일 경로에 포함된 문자 또는 비문자에 관계없이 다음을 수행해야 합니다.

find folder/ -type f -exec awk '
  /pattern/ {
    print FILENAME":"$0" -> Line: "FNR
  }' {} +

이는 또한 -r비표준 및 비이식성 옵션이 필요하지 않게 해줍니다 grep.


1 디렉토리 계층 구조가 너무 깊어서 파일 경로 길이를 초과하는 경우에는 이것이 신뢰할 수 없을 수도 있습니다 PATH_MAX.

관련 정보