Найти и заменить строку во всех найденных файлах с помощью LaTeX $ sim $ -> $ \ sim $ - PullRequest
0 голосов
/ 03 апреля 2019

Я знаю, что подобные вопросы задавались много раз раньше, но я сталкиваюсь с странным обстоятельством, когда мой слабый мозг забыл включить \ при вызове $\sim$ в некоторых файлах уценки.Мне нужно пройти и заменить все экземпляры $sim$ на $\sim$.Мой код работает, но фактически не заменяет слова, которые я хочу.Вот некоторые варианты, которые я пробовал:

grep -rl '\$sim\$' . | xargs sed -i 's/\$sim\$/$\sim$/g'

grep -rlF '$sim$' . | xargs sed -i 's/\$sim\$/$\sim$/g'

grep -rlF '$sim$' . | xargs sed -i 's/$sim$/$\sim$/g'

grep -rlF '$sim$' . | xargs sed -i '' -e 's/$sim$/$\sim$/g'

И другие странные варианты по теме.Код работает без вывода, но когда я проверяю файлы, ничего не меняется.Я полагаю, что это либо проблема sed (я macOS), либо проблема регулярных выражений.

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

sed -i изменяет файлы на месте, однако вы не говорите sed для работы с какими-либо файлами.Вы даете SED свой ввод на стандартный ввод.

То, что вы хотите, это что-то вроде

find . -type f -exec sed -i 's/\$sim\$/$\\sim\$/g' {} \;
0 голосов
/ 03 апреля 2019

Как это:

grep -rlF '$sim$' | xargs sed -i 's/$sim\$/$\\sim$/g'

для MacOsX:

grep -rlF '$sim$' | xargs sed -i '' 's/$sim\$/$\\sim$/g'
...