현재 Jupyter Notebook을 사용하고 있습니다. IDE를 사용하여 다른 위치에 있을 수 있는 코드 부분을 찾아 필요에 따라 리팩터링할 수 있었습니다.
다음 코드가 있다고 가정해 보겠습니다.
class.function('--parameter','-p', type = lambda x: operation(x,"%Y-%m-%d").date(),
default=unicode(previousTime-actualTime),
help='Send help'
)
코드는 편집되었으며 작동하도록 의도된 것이 아닙니다. 여러 줄, 여러 "이상한" 문자, 따옴표 등이 있을 가능성에 대한 예를 제공하고 싶었습니다.
이제 내 코드베이스에 정확한 문자열이 존재하는지 확인하고 싶습니다.
여기 저기 둘러보고 설명서를 읽어봤는데 다음과 같은 내용이 있습니다.
grep -rxno . -e "string starts
more text here %% 'parameters inside quotes'
string ends"
하지만 정규 표현식이기 때문에 일치하는 하위 문자열과 비슷하지만 반드시 동일하지는 않을 것 같습니다. 또한 더 혼란스럽게도 한 줄에 결과를 제공합니다.
./DMP3K/DMP_3K.py:30:class.function(
./DMP3K/DMP_3K.py:31:
./DICC/diccionario.py:34: operation(x,"%Y-%m-%d").date()
내가 놓친 이 작업을 수행하는 더 쉬운 방법이 있어야 한다고 생각합니다.
답변1
grep
GNU (Linux의 기본값) 에 액세스할 수 있는 경우 -z
다음 명령을 사용할 수 있습니다.
-z, --null-data
Treat input and output data as sequences of lines, each terminated by a
zero byte (the ASCII NUL character) instead of a newline. Like the -Z or
--null option, this option can be used with commands like sort -z to
process arbitrary file names.
이렇게 하면 여러 줄에 걸쳐 있는 패턴을 지정할 수 있습니다. 그런 다음 -F
정규식으로 해석되지 않는 패턴을 사용합니다.
-F, --fixed-strings
Interpret PATTERN as a list of fixed strings (instead of regular
expressions), separated by newlines, any of which is to be matched.
마지막으로 검색 문자열을 변수에 저장합니다.
$ IFS='' read -r -d '' pat <<EoF
> class.function('--parameter','-p', type = lambda x: operation(x,"%Y-%m-%d").date(),
> default=unicode(previousTime-actualTime),
> help='Send help'
> )
> EoF
위의 코드를 실행하려면 먼저 터미널에 다음을 작성하세요.
IFS='' read -r -d '' pat <<EoF
그런 다음 찾고 있는 줄을 붙여넣고 EoF
. 검색 문자열이 새 줄로 끝나지 않으면 해당 줄에 있어야 하므로 Enter쓰기 전에 키를 누르십시오 .EoF
이제 grep
파일을 다음과 같이 할 수 있습니다.
grep -z "$pat" /path.to/files/*
위의 의미는