Вы не вставляете \$
; Вы просто заменяете [
, а не \[
знаком доллара. Сравните:
# Wrong
$ perl -p -e 's/\[/\$/gm' tmp.txt
\$a + b = c\]
# Right
$ perl -p -e 's/\\\[/\$/gm' tmp.txt
$a + b = c\]
Чтобы заменить оба,
$ perl -p -e 's/\\\[|\\\]/\$/gm' tmp.txt
$a + b = c$
Для чего это стоит, вы можете сделать это с помощью стандартного редактора ed
, а не perl
, хотя экранирование становится немного запутанным (даже переключение на более простое регулярное выражение tripleee для сопоставления с любым из разделителей; оно выглядит одинаково, но двойное значение \\
здесь для printf
, а не ed
, так как я использую |
в операторе замещения.):
$ cat tmp.txt
\[a + b = c\]
$ printf 's|\\\[][]|$|g\nwq\n' | ed tmp.txt
14
12
$ cat tmp.txt
$a + b = c$