줄의 시작 부분을 거기에 있는 것과 일치시킵니까?

줄의 시작 부분을 거기에 있는 것과 일치시킵니까?

무언가를 포함하는 줄의 시작 부분을 일치시키고 싶습니다.

Perl/Sed의 명령

's/^.?/\section{}/g'

하지만 여기서 문제는 문장의 첫 글자도 대체한다는 점이다.

줄 시작 부분에 비어 있지 않은 줄 내용을 추가하는 방법은 무엇입니까?

답변1

sed '/./s/^/\\section{}/'

\section{}적어도 하나를 포함하는 모든 줄에 추가됩니다효과적인특징.

sed '/^$/!s/^/\\section{}/'

비어 있지 않은 모든 줄에 추가됩니다 \section{}(예: 최소한 하나의 줄 포함).바이트).

sed 's/./\\section{}&/'

\section{}해당 유효한 문자가 있는 각 줄의 첫 번째 유효한 문자 앞에 삽입됩니다. ( &일치하는 부품으로 교체).

그 차이점은바이트그리고특징이는 문자당 멀티바이트 로캘(예: 요즘 표준인 UTF-8)에 있지만 확장된 단일 바이트 문자 집합으로 인코딩된 텍스트를 처리하는 경우 의미가 있을 수 있습니다.

예를 들어:

$ locale charmap
UTF-8
$ echo Москва | iconv -t iso-8859-5 | sed 's/./\\section{}&/' | iconv -f iso-8859-5
Москва

(iso-8859-5로 인코딩되면 모스크바의 결과 바이트 값 중 어느 것도 UTF-8에서 유효한 문자를 형성하지 않으므로 /./일치하는 항목이 없습니다.)

삽입하는 텍스트가 ASCII이므로 인코딩은 문제가 되지 않으므로 놀라움을 피하기 위해 로케일을 C로 수정할 수 있습니다.

$ echo Москва | iconv -t iso-8859-5 | LC_ALL=C sed 's/./\\section{}&/' | iconv -f iso-8859-5
\section{}Москва

답변2

두 가지 명령문을 사용하여 이 작업을 수행할 수 있습니다 sed. 첫 번째 명령문은 일치하는 빈 줄이 없는지 확인하고 두 번째 명령문은 시작 부분에 추가됩니다.

sed '/^$/n;s/^/\\section{}/'

또는 일치 항목을 캡처하고 이를 대체 항목에 추가하여 하나의 문에서 이 작업을 수행할 수 있습니다.

sed 's/^\(.\)/\\section{}\1/'

여기서는 괄호를 사용 하여 문의 대체 부분에서 참조되는 캡처링 그룹을 \(정의합니다 .\)\1

?또한 줄이 비어 있지 않은지 확인하려면 점 뒤의 물음표를 제거해야 합니다 .. ?"0 또는 1"을 나타내므로 빈 줄은 길이 0과 일치합니다.

답변3

너비가 0인 긍정적 예측 어설션을 사용합니다.

perl -pe 's/^(?=.)/\section{}/'

perlre설명하다:

(?=pattern)너비가 0인 긍정적 예측 어설션. 예를 들어 /\w+(?=\t)/단어 뒤에 탭 문자가 있지만 탭 문자를 포함하지 않는 단어와 일치합니다.$&

또 다른 해결책:

perl -lpe 's/^/\section{}/ if length'

길이를 확인하기 전에 \n줄의 끝 부분을 씹어야 합니다.

-l옵션이 이를 수행합니다.

-l[octnum]자동 줄 바꿈 처리를 활성화합니다. 두 가지 다른 효과가 있습니다. 먼저 $/or 와 함께 사용하면 자동으로 끊어집니다(입력기록 구분자). 둘째, (출력 레코드 구분 기호)에 8진수 값이 있으므로 모든 인쇄 문이 해당 구분 기호를 다시 추가하도록 지정합니다. octnum을 생략하면 현재 값으로 설정됩니다.-n-p$\$\$/

관련 정보