Perl 정규식을 사용하여 줄을 굵게 표시

Perl 정규식을 사용하여 줄을 굵게 표시

나는 가지고있다

1. Lorem
He he he

% not sure spelling
2. Lorem 
ipsun

있기를 바랍니다

\textbf{1. Lorem}
He he he

% not sure spelling
\textbf{2. Lorem}
ipsun

내 의사코드 시도

perl -000pe 's/\n\n\d./; s/\n\d.\n\\textbf\{ /g; s/$/\}/'

이것은 정규 표현식에 관해 이전에 가졌던 두 가지 질문을 기반으로 합니다. 나는 숫자로 시작하는 것을 일치시키려고 노력합니다. 경기 시작과 경기 종료를 교체합니다.

코드가 나에게 준

Backslash found where operator expected at -e line 1, near "s/\n\n\d./; s/\"
Backslash found where operator expected at -e line 1, near "n\"
Backslash found where operator expected at -e line 1, near "n\"
Backslash found where operator expected at -e line 1, near "textbf\"
Backslash found where operator expected at -e line 1, near "$/\"
    (Missing operator before \?)
syntax error at -e line 1, near "s/\n\n\d./; s/\"
Execution of -e aborted due to compilation errors.

주어진 텍스트를 굵게 만드는 방법은 무엇입니까?

답변1

-000각 "단락"을 "줄"로 만들기 때문에 클래식 정규식 앵커( ^$)를 사용하여 각 "줄"의 시작과 끝을 일치시킬 수 있습니다. 따라서 귀하의 경우 필요한 것은 다음과 같습니다.

$ perl -000pe 's/^(.+)\n/\\textbf{$1}\n/;' file 
\textbf{1. Lorem}
He he he

\textbf{2. Lorem }
ipsun

참고로 \이스케이프( \\) \는 다른 문자를 이스케이프하는 데 사용되는 특수 문자이므로 자체 이스케이프에도 사용해야 합니다.


주석을 단락의 첫 번째 줄로 지정할 수 있는 경우 이 접근 방식은 실패합니다. 숫자로 시작하는 모든 줄을 굵게 표시해야 합니다.

perl -pe 's/^\d\..+/\\textbf{$&}/' file

답변2

이 시도:

$ perl -ple '$_ = "\\textbf{$_}" if /^\d/' cat2
\textbf{1. Lorem}
He he he

\textbf{2. Lorem}
ipsun

답변3

-0777전체 파일을 한 번에 메모리에 로드하는 옵션을 사용했습니다 . 그런 다음 개행 문자를 바꿀 수 있습니다.

perl -0777 -pe 's/\n(\d\..*)/\n\\textbf{$1}/g'

관련 정보