
무언가를 포함하는 줄의 시작 부분을 일치시키고 싶습니다.
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
$\
$\
$/