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
명령은 제거되지 않습니다 firstmatch
및 secondmatch
.
결과가되기를 원합니다.
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