Вы можете использовать оператор ..
или range чтобы ограничить подстановки начальными / конечными разделами:
while () {
if ( /\\begin/ .. /\\end/ ) {
s/^(?!\\)/\\item /;
}
print;
}
__DATA__
7. Masi is the same as
\begin{enumerate}
A
B
ABC ha lorem
\end{enumerate}
1. ABC is
\begin{enumerate}
P
B
Lorem maam
\end{enumerat
Если вы предпочитаете сценарий командной строки:
perl -ne 'if (/\\begin/../\\end/) {s/^(?!\\)/\\item /};print'
Или, короче, с неявной печатью
:
perl -pe 'if (/\\begin/../\\end/) {s/^(?!\\)/\\item /}'
(?!. ..)
- утверждение с отрицательным прогнозом.
tr/a-z/ /cs;
попросит заменить пробелами все символы, которых нет в наборе a-z
. (Замыкающий c
должен дополнять набор, иначе он заменит все символы от a
до z
.)
Вы должны быть более конкретными. s/[[:punct:]]+/ /g
заменит все последовательности знаков препинания на одиночные пробелы, а s/[^[:alpha:]]+/ /g
заменит все последовательности не -буквенных символов на одиночные пробелы.
Обратите внимание, что по крайней мере [:alpha:]
будет зависеть от локали -, и вам нужно указать Perl использовать UTF -8 с -C
или подобным. Также обратите внимание, что [^[:alpha:]]
также удаляет цифры и завершающий символ новой строки. Это локаль en_US.UTF-8
в Debian :
$ echo '[]përgjithshme [" është "] 28.748 [< kilometra katrorë.>]' | perl -C -pe 's/[^[:alpha:]]+/ /g'
përgjithshme është kilometra katrorë $
$ echo '[]përgjithshme [" është "] 28.748 [< kilometra katrorë.>]' | perl -C -pe 's/[[:punct:]]+/ /g'
përgjithshme është 28 748 kilometra katrorë
$