안녕하세요, 저는 하위 폴더에 있는 모든 단어를 찾으려고 합니다. 이것이 쉬운 것처럼 보이지만, 각 항목에 대해 경로와 파일 이름, "-> 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
.