두 개의 변수를 시작 및 끝 매개변수로 사용하여 텍스트 파일에서 범위 가져오기

두 개의 변수를 시작 및 끝 매개변수로 사용하여 텍스트 파일에서 범위 가져오기

텍스트 파일에서 특정 줄 범위를 가져오기 위해 grep을 사용하려고 합니다. 줄 범위는 두 개의 변수로 식별되어야 합니다. 지금까지 저는 와일드카드 "*"를 사용하여 이 작업을 수행해 왔습니다. 실패한 시도의 예는 다음과 같습니다. (처음 두 개가 작동하지 않는 이유를 알 수 있습니다.)

grep "$Var1"*"$Var2" file.txt     
grep "$Var1*$Var2" file.txt
echo "$Var1*$Var2" | grep file.txt

답변1

grep여러 줄 검색에서는 작동하지 않습니다. 이 작업에 더 적합한 다른 도구가 있습니다: awksed.

패턴을 유지하기 위해 변수를 사용하기 때문에 상황이 까다로울 수 있습니다. 먼저 하드코딩 모드를 사용해 보세요. 올바르게 설정했다면 하드코딩된 패턴을 변수로 바꿔보세요.


사용 awk:

awk '/'"$Var1"'/,/'"$Var2"'/' file.txt

하드코딩 모드에서 동일한 명령을 사용하여 개념을 설명합니다.

awk '/pattern1/,/pattern2/' file.txt

설명하다:

  • /pattern1/,/pattern2/범위입니다. 범위는 일치하는 줄에서 시작하여 pattern1일치하는 줄에서 끝납니다 pattern2.
  • 기본적으로 awk범위 내의 행만 인쇄됩니다.

다음에 대해 자세히 알아보세요 awk.http://www.catonmat.net/blog/awk-one-liners-explained-part-one/


사용 sed:

sed -n '/'"$Var1"'/,/'"$Var2"'/ p' file.txt

하드코딩 모드에서 동일한 명령을 사용하여 개념을 설명합니다.

sed -n '/pattern1/,/pattern2/ p' file.txt

설명하다:

  • -n그렇게 하라는 지시를 받은 경우 sed가 행만 인쇄하도록 하십시오.
  • /pattern1/,/pattern2/범위입니다. 범위는 일치하는 줄에서 시작하여 pattern1일치하는 줄에서 끝납니다 pattern2. 범위의 각 줄에 대해 다음 명령이 실행됩니다.
  • 마지막은 인쇄 라인을 p알려줍니다 .sed

다음에 대해 자세히 알아보세요 sed.http://www.catonmat.net/blog/sed-one-liners-explained-part-one/


꼭 사용해야 한다면 Tell을 사용하여 Perl 정규식 엔진을 사용할 grep수 있습니다 . 매뉴얼 페이지에는 이 기능에 대한 설명이 있습니다:-Pgrep

패턴을 Perl 호환 정규식(PCRE)으로 해석합니다. 이는 매우 실험적이며 grep -P는 구현되지 않은 기능에 대해 경고할 수 있습니다.

관련 정보