Bash에서 여러 줄 문자열 찾기

Bash에서 여러 줄 문자열 찾기

현재 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

grepGNU (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/*

위의 의미는

관련 정보