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{}Москва
Вы можете сделать это двумя операторами с помощью sed
: первый, чтобы гарантировать отсутствие пустых строк. совпадает, второй добавляется в начале:
sed '/^$/n;s/^/\\section{}/'
Или вы можете сделать это в одном операторе, захватив то, что вам подходит, и добавив его к своей замене:
sed 's/^\(.\)/\\section{}\1/'
Здесь круглые скобки \ (
и \)
определяют группу захвата, на которую ссылается \ 1
в замещающей части оператора.
Также обратите внимание, что для того, чтобы убедиться, что строка не пуста, вам нужно удалить знак вопроса ?
после точки .
. ?
означает «0 или 1», поэтому пустая строка будет соответствовать нулевой длине.
Использовать Утверждение положительного упреждения нулевой ширины:
perl -pe 's/^(?=.)/\section{}/'
perlre
говорит:
(? = шаблон)
Утверждение положительного упреждения нулевой ширины. Например,/ \ w + ( ? = \ t) /
соответствует слову, за которым следует табуляция, без включения табуляции в$ &
Другое решение:
perl -lpe 's/^/\section{}/ if length'
В конце вы должны пережевывать \ n
строки перед проверкой длины.
Параметр -l
сделает это за вас.
-l [octnum]
включает автоматическую обработку окончания строки. Он имеет два отдельных эффекта. Во-первых, он автоматически перехватывает$ /
(разделитель входных записей) при использовании с-n
или-p
. Во-вторых, он присваивает$ \
(разделитель выходной записи) значение octnum, чтобы в любые операторы печати этот разделитель снова добавлялся.Если octnum опущен, устанавливает$ \
равным текущему значению$ /