У меня есть большой sql файл, и я хотел бы переименовать имя таблицы от 'обратной связи' до 'комментариев', но я не хочу заменять обратную связь слова в случае, если любая строка имеет тот текст, таким образом, я пытался выбрать его с кавычками, но энергия не может найти его. Я использую
:s/`feedback`/`comments`/
Какая-либо идея, как сделать это? возможно, энергия не является te наилучшим вариантом для этого?
В то время как vim
, конечно, способно к выполнению этого, моя первая мысль должна была бы использовать sed
или perl
. Используя sed
:
sed -i.bak 's/`feedback`/`comments`/g' path/to/file
Эти -i
флаг делает sed
, работают, операции в файлах, определенных вместо того, чтобы писать в stdout
(-isuffix
, делает резервную копию path/to/filesuffix
).
Попытка в энергии:
:%s/`feedback`/`comments`/gc
это должно работать, как Вы ожидали
Вот vi/vim острота (использование ex -s
постараться не открывать полноэкранного редактора, приводящего к короткой флэш-памяти):
ex -s -c 'w %~ | %s/`feedback`/`comments`/g' -c 'x' <file>
Объяснение:
w %~
сохраняет копию файла с ~
суффикс. Это удобно как резервное копирование в случае, если Вы портите что-то.|
разделитель команды.%
означает, "делают это действие с каждой строкой".s/`feedback`/`comments`
, поскольку Вы, вероятно, уже знаете, средства "текст замены, соответствующий regex `feedback`
с `comments`
на текущей строке".g
означает "глобальный", т.е. не останавливайтесь после первой замены относительно строки.x
сокращение от wq
, т.е. это означает, пишут файл и выходят. Это должно быть отдельным, потому что иначе это зависнет, если там не будет идти ни в какое сравнение.