2017-03-04 1 views
1

인쇄용 라텍스 파일로 변환하려고하는 텍스트 파일이 있습니다. 처럼 보이도록Sed 대체는 줄 시작 부분에 역 참조 후 문자를 배치합니다.

Book 01  Introduction 

: : 첫 번째 단계 중 하나는 통과와 같이 라인을 변경하는 것입니다

:이를 위해

\chapter{Introduction} 

을, 나는 매우 간단한 나오지도 스크립트를 고안했다

sed -n -e 's/Book [[:digit:]]\{2\}\s*(.*)/\\chapter{\1}/p' 

끝나는 중괄호는 대체 백 슬래시가 대체 된 출력에 있어야하는 위치에 배치됩니다. 좋아요 :

}chapter{Introduction 

왜 이런 경우입니까?

답변

0

해결책은 캡처 그룹을 수정하는 것입니다. 이 경우 모든 장의 장 이름은 영문자로만 구성되어 있으므로 [[:alpha:]]*을 사용할 수있었습니다. 이것은의 수정 나오지도 스크립트를 주었다

sed -n -e 's/Book [[:digit:]]\{2\}\s*\([[:alpha:]]*\)/\\chapter{\1}/p'. 
3

sed에 대한 귀하의 전화가 괜찮습니다; 문제는 파일에서 DOS 줄 끝 (CRLF)을 사용하지만, sed은 CR을 줄 끝 부분으로 인식하지 않고 줄의 다른 문자로 인식한다는 것입니다. 문자열 Introduction\r 캡처되고, 그 결과 \chapter{Introduction\r}는 캐리지 리턴을 모두를 인쇄하여 인쇄

\chapter{Introduction 
        ^

다음 라인의 시작 부분에 커서를 이동합니다 (^ 커서 위치를 나타낸다)

\chapter{Introduction 
^ 

다음 이미 인쇄 된 내용을 통해 결과 (})의 나머지 부분을 인쇄

}chapter{Introduction 
^ 

해결책은 표준 POSIX 라인 끝 (라인 피드 만)을 사용하도록 파일을 수정하거나 정규식을 수정하여 줄 끝의 캐리지 리턴을 캡처하지 않는 것입니다.

awk '{gsub(/Book [0-9]+/,"\\chapter"); print $1"{"$2"}"}' 

결과 :

\chapter{Introduction} 
이 상황에서 잘 작동 할 수 있습니다 gsub를 사용 sed하는 대신
sed -n -e 's/Book [[:digit:]]\{2\}\s*(.*)\r?$/\\chapter{\1}/p' 
2

, awk
관련 문제