У меня есть a plain text
файл с LaTeX
команды как \hspace{5cm}
. Преобразовать этот файл в .odt
некоторые мои пользовательские команды не преобразовываются правильно. Таким образом, я хочу автоматически найти и заменить определенные команды, но сохранять содержание скобок (подразумевать, что я хочу сохранить большинство команд и просто удалить некоторых). Я знаю, что могу просто открыться gedit
и сделайте замену вручную, но это для сценария для повторной, автоматической замены.
Я уже искал это, но до сих пор только нашел, что ответы удалили скобки при сохранении там довольным (cf. здесь, здесь)). Я также посмотрел на некоторые введения в sed
(например, здесь или здесь) без любого успеха.
This is my \textbf{text} where there are about \prc{5} commands, i.e. \mErrRange{30}{20}{m}.
Так, так как это процент и диапазон ошибок, я хочу удалить команду и фигурные скобки и получить что-то вроде этого (хранение \textbf{...}
команда):
This is my \textbf{text} where there are 5 % commands, i.e. 30 ± 20 m.
Что я попробовал до сих пор:
Различные способы использоватьsed
, как:
sed -i -e 's/\\prc{\(.*\)}/\1%/g' hello.txt
Это уже дает мне:
This is my \textbf{text} where there are about 5} commands, i.e. \mErrRange{30}{20}{m%.
(Замена последней фигурной скобки в строке, но отъезда другого в его месте.)
Так, теперь у меня нет подсказки, как продолжить это. Возможно, я должен использовать другой инструмент вместо sed
?! Я доволен любым предложением, работающим на Ubuntu и в terminal
не устанавливая слишком много.
Вот путь:
sed 's/\\prc{\([^}]*\)}/\1 %/g'
Это получит все в скобках после \prc
и сохраните его в группе 1
, можно использовать это для замены команды содержанием скобок. [^}]*
просто берет все кроме закрывающей скобки здесь. g
обозначает “глобально” и означает, что это заменит всеми происшествиями шаблона в строке вместо просто первой – Вы захотите это для каждого выражения в Вашем случае.
Что касается другого, просто используйте несколько групп:
sed 's/\\mErrRange{\([^}]*\)}{\([^}]*\)}{\([^}]*\)}/\1 ± \2 \3/g'
Можно объединиться как многие из тех выражений как Вам угодно, но это становится легко неясным. Я рекомендую писать a sed
сценарий с одним выражением на строку как так:
#!/bin/sed -f
s/\\prc{\([^}]*\)}/\1 %/g
s/\\mErrRange{\([^}]*\)}{\([^}]*\)}{\([^}]*\)}/\1 ± \2 \3/g
Сохраните его как, например. script.sed
, сделайте это исполняемым файлом с chmod +x /path/to/script.sed
и выполненный это с /path/to/script.sed
.
$ /path/to/script.sed <hello.txt
This is my \textbf{text} where there are about 5 % commands, i.e. 30 ± 20 m.
Я позволяю оболочке открывать входные файлы максимально часто, следовательно <hello.txt
вместо просто hello.txt
(который также работает!). Если Вам интересно, в каких взлетах это точно сделало, я рекомендую этот ответ на Unix. SE.