두 패턴 사이(및 제외)에 줄을 인쇄합니다.

두 패턴 사이(및 제외)에 줄을 인쇄합니다.

cURL을 사용하여 다른 파일에서 가져온 일부 콘텐츠가 포함된 양식을 제출하겠습니다.sed

param1다른 파일의 줄 일치 패턴을 사용 하면 sed다음이 제대로 작동합니다.

curl -d param1="$(sed -n '/matchpattern/p' file.txt)" -d param2=value2 http://example.com/submit

이제 문제 해결을 시작해 보겠습니다. 일치하는 패턴 자체가 아닌 두 개의 일치하는 패턴 사이에만 텍스트를 표시하고 싶습니다.

file.txt다음이 포함된다고 할 수 있습니다 .

Bla bla bla
firstmatch
It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout.
secondmatch
The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English.

현재 많은 "beetween 2 일치 패턴" 명령은 및 를 sed제거하지 않습니다 .firstmatchsecondmatch

나는 결과가 다음과 같기를 원합니다.

It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout.

답변1

이를 수행할 수 있는 한 가지 방법은 다음과 같습니다.

sed '1,/firstmatch/d;/secondmatch/,$d' 

설명: 첫 번째 줄부터 일치하는 줄까지첫 번째 게임, 삭제. 라인 매칭의 관점에서두 번째 게임마지막 줄로 가서 삭제하세요.

답변2

첫 번째 줄에 1이 나타나면 다른 sed해결 방법은 실패합니다 .firstmatch

간단하게 유지하고 단일 범위와 빈 2 정규식을 사용하십시오.
범위의 끝을 제외하고 범위의 모든 것을 인쇄하십시오(자동 인쇄는 비활성화됩니다) 3 :

sed -n '/firstmatch/,/secondmatch/{//!p;}' infile

또는 더 짧게는 범위에 없는 모든 항목을 제거하고 범위 끝을 제거합니다.

sed '/firstmatch/,/secondmatch/!d;//d' infile


1: 이유는 두 번째 주소가 정규식인 경우 검사 종료 일치는 첫 번째 주소와 일치하는 줄 다음 줄에서 시작됩니다..
따라서 /firstmatch/입력의 첫 번째 줄은 평가되지 않고 sed줄 번호와 일치하기 때문에 제거되고 1,/RE/두 번째 줄로 이동하여 일치하는지 확인합니다./firstpattern/

2:언제정규식비어 있음(예: //)은 sed마지막과 같이 동작합니다.정규식마지막으로 적용된 명령에 사용된 내용을 지정합니다(주소 또는 대체 명령의 일부로).

3: ;}구문은 최신 sed구현에 적합합니다. 오래된 구현의 경우 세미콜론이나 별도의 표현식 대신 개행 문자를 사용하세요.sed -n -e '/firstmatch/,/secondmatch/{//!p' -e '}' infile

답변3

전혀:

awk '
  $1 == "secondmatch" {print_me = 0}
  print_me {print}
  $1 == "firstmatch {print_me = 1}
'

관련 정보