두 패턴 사이 (및 제외) 사이의 선 인쇄 -d param2=value2 http://example.com/submit 이제 문제를 해결하십시오.

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.


답변

당신이 그것을 할 수있는 한 가지 방법이 있습니다 :

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

설명 : 첫 번째 줄에서 firstmatch 와 일치하는 줄까지 삭제하십시오. 라인 매칭에서 secondmatch 마지막 줄에, 삭제합니다.


답변

awk에서 :

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

답변

첫 번째 행 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마지막 경우로 동작을 REGEX 마지막 명령이 사용 (어드레스 또는 대체 명령의 일부로서 하나)인가를 지정 하였다.

3 : ;}구문은 현대적인 sed구현을 위한 것입니다. 오래된 것들은 세미콜론 대신 개행 문자를 사용하거나 별도의 표현을 사용하십시오.sed -n -e '/firstmatch/,/secondmatch/{//!p' -e '}' infile