원시 PCL/PS 파일(하이브리드)을 수정하고 있는데 어떤 이유로 Sed 구문이 실제로 시작하기 위해 올바르게 작동하도록 할 수 없습니다. 다음은 strings 명령의 샘플 출력입니다.
*c50B
*c0P
&f1X
&f7y4X
%-12345X%!PS-Adobe-3.0 EPSF-3.0 <------Sed doesn't work for this pattern
%%Creator: tiff2ps <----Sed works for this pattern
[data...]
%%EOF
이것은 내 작업 sed 명령입니다.
sed -n '/%%Creator/,/%%EOF/p'
하지만 %-12345X%로 시작하고 싶습니다.
sed -n '/%-12345X%/,/%%EOF/p'
마지막 명령을 실행하면 전체 파일이 출력됩니다. 이 줄 조합은 작동하지 않습니다. 이제 "문자열"이 포함된 원시 인쇄 파일을 보고 있습니다. 해당 줄이 sed가 이해하지 못하는 방식으로 인코딩되어 있습니까? 이 문제를 해결할 아이디어가 있나요?
다음을 추가하도록 편집되었습니다.
나는 이것이 PCL의 인코딩 및 라인 이스케이프와 관련이 있다고 확신합니다. 파일은 PCL에서 PS로 이동하며 PS의 첫 번째 메시지는 자체 줄에 생성되지 않습니다. cat의 출력은 다음과 같습니다.
*c50BESC*c0PESC&f1XESC&f7y4XESC%-12345X%!PS-Adobe-3.0 EPSF-3.0
%%Creator: tiff2ps
답변1
내 생각엔 sed가 당신이 지시한 일을 하고 있는 것 같습니다: %-12345X%
. 최대 "%%Creator:" - 전체 내용을 인쇄합니다. sed는 일치하는 "라인"을 인쇄한다는 점을 기억하세요. 나는 당신이 요청한 것이 "이 문자열에서 시작"을 인쇄하는 것이라고 생각합니다.
라인 지향이 보장되지 않는 파일(예: 이 파일)을 얻으려면 라인 지향 도구에 의존하지 않는 기술을 사용해야 합니다. 이는 도움이 될 수 있습니다:바이너리 파일의 일부를 덤프하는 방법. 약간 복잡하지만 문자열이 매우 독특하므로 트릭을 수행해야 합니다.
흠... 그냥 아이디어가 떠올랐어요. 어쩌면 이게 효과가 있을 수도 있겠네요. %-12345X% 앞의 동일한 "줄"에 있는 모든 항목을 삭제합니다(문자열 자체 제외). 그런 다음 해당 줄부터 파일 끝까지 모든 내용을 인쇄합니다. 아직 시도하지는 않았지만 접근 방식은 다음과 같습니다.
sed -n -e '/%-12345X%/s/.*%-12345X%/%-12345X%/' -e '/%-12345X%/,/%%EOF/p'
또는 더 나은 방법은 다음과 같습니다.
STR="%-12345X%"
sed -n -e "/${STR}/s/.*${STR}/${STR}/" -e "/${STR}/,/%%EOF/p"