텍스트 파일에서 특정 줄 범위를 가져오기 위해 grep을 사용하려고 합니다. 줄 범위는 두 개의 변수로 식별되어야 합니다. 지금까지 저는 와일드카드 "*"를 사용하여 이 작업을 수행해 왔습니다. 실패한 시도의 예는 다음과 같습니다. (처음 두 개가 작동하지 않는 이유를 알 수 있습니다.)
grep "$Var1"*"$Var2" file.txt
grep "$Var1*$Var2" file.txt
echo "$Var1*$Var2" | grep file.txt
답변1
grep
여러 줄 검색에서는 작동하지 않습니다. 이 작업에 더 적합한 다른 도구가 있습니다: awk
및 sed
.
패턴을 유지하기 위해 변수를 사용하기 때문에 상황이 까다로울 수 있습니다. 먼저 하드코딩 모드를 사용해 보세요. 올바르게 설정했다면 하드코딩된 패턴을 변수로 바꿔보세요.
사용 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
수 있습니다 . 매뉴얼 페이지에는 이 기능에 대한 설명이 있습니다:-P
grep
패턴을 Perl 호환 정규식(PCRE)으로 해석합니다. 이는 매우 실험적이며 grep -P는 구현되지 않은 기능에 대해 경고할 수 있습니다.