Оболочка интерпретирует командную строку с определенными правилами, которые необходимо рассмотреть здесь:
Можно выйти из метасимволов оболочки с \так, чтобы это вело себя как обычный символ.
Можно использовать одинарные или двойные кавычки и в них большинство (с двойными кавычками) или все (с одинарными кавычками), метасимволы оболочки теряют свое особое значение.
Кавычки не должны быть на границах слова, так, чтобы rm th"is fil"e
совпал бы с rm "this file"
.
Символы []? * может использоваться для расширения имени файла. Им нельзя заключить в кавычки или оставить с этой целью.
Таким образом, возможные решения для Вашего случая rm -rf '('*
, rm -rf "("*
и rm -rf \(*
. Я не знаю, почему последний не работал в Вашем случае. Возможно, существует некоторый пробел перед круглой скобкой?
Со следующей строкой необходимо смочь видеть, существуют ли какие-либо забавные символы в именах файлов:
for i in *; do od -c <<< "$i"; done
Вы можете использовать оператор ..
или range чтобы ограничить подстановки начальными / конечными разделами:
while (<DATA>) {
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 /}'
(?!. ..)
- утверждение с отрицательным прогнозом.
Использовать флаг . Установите его в 1 при вводе enumerate, очистите его в конце. Вставить элемент, когда установлен флаг:
perl -pe '$inside = 0 if /\\end{enumerate}/;
print "\\item " if $inside;
$inside = 1 if /\\begin{enumerate}/;
' input.tex
Обратите внимание, что я проверяю конец перед печатью, поэтому \ item
не добавляется к конечной строке.
Другое Perl
решение:
$ perl -pe '
if (/\\begin/../\\end/) {
next if /\\begin/ || /\\end/;
s/^/\\item /;
}
' file
7. Masi is the same as
\begin{enumerate}
\item A
\item B
\item ABC ha lorem
\end{enumerate}
1. ABC is
\begin{enumerate}
\item P
\item B
\item Lorem maam
\end{enumerate}
пояснение
if (/\\\begin/../\\\end/)
: наш разделитель строк начинается с \begin
и заканчивается \end
. next if /\\\begin/ || /\\end/
: нам не нужны начало и конец, пропустите их. s/^/\\\\item /
: заменяем начало каждой строки на нужный нам шаблон. -p
опция заставляет perl
печатать каждую строку после того, как мы ее обработали.