Bash для комментирования строки в файле LaTeX .cls с помощью%, используя команду sed - PullRequest
0 голосов
/ 09 ноября 2018

Я пытаюсь использовать bash с sed для замены

    \printfield{year}%

этим

    %\printfield{year}%

В начале строки 4 пробела (хотя я не уверен, имеет ли это значение). По сути, это файл LaTeX *.cls, и мне нужно закомментировать каждый случай \printfield{year}%.

Моя попытка была основана на этом SO сообщении

sed -i 's/\printfield{year}%/%\printfield{year}%/g' mydir/xxxxx.cls

однако он производит этот вывод

    \%printfield{year}%

, где знак % находится не в том месте - он должен находиться в начале строки (1-й символ), но появляется как 2-й символ. Я тоже попробовал sed -i "..." .i.e. используя двойные кавычки, но он по-прежнему выдает тот же неправильный вывод (выше), что и одинарные кавычки.

Есть ли способ закомментировать эту строку, поместив % в начале строки, используя sed в bash?

Информация о системе

Ubuntu 18.10

Ответы [ 3 ]

0 голосов
/ 09 ноября 2018

\p

\ является escape-символом. Чтобы напечатать \, вам нужно указать его дважды. \p сбрасывается до p, а \ игнорируется. Использование:

sed 's/\\printfield{year}%/%\\printfield{year}%/g'
0 голосов
/ 09 ноября 2018

Это потому, что bash интерпретирует символ \ как escape-символ, то есть в вашей команде sed

sed -i 's/\printfield{year}%/%\printfield{year}%/g' mydir/xxxxx.cls

пытается заменить экранированное поле печати 'p' другой командой, чтобы обойти это экранирование вашего \ другим \

так

sed -i 's/\\printfield{year}%/%\\printfield{year}%/g' mydir/xxxxx.cls
0 голосов
/ 09 ноября 2018

требуется экранирование от обратной косой черты

$ sed 's/\\printfield{year}%/%&/g' file

обратите внимание, что вам не нужно повторять совпадающую строку, & для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...