#linux #sed #expression
#linux #sed #выражение
Вопрос:
Я хотел бы заменить во всех файлах, содержащихся в каталоге (включая подкаталоги), выражение ‘/ foo /’ на ‘/ foo / bar /’, но только в строках, содержащих ‘.model’
пример :
import {....} from '../foo/toto.model' => import {....} from '../foo/bar/toto.model
import {....} from '../foo/toto.service' => unchanged
Спасибо за вашу помощь
Ответ №1:
Вы можете сделать это довольно легко с sed -i
помощью and find
. Вы будете использовать find
для поиска всех файлов ниже выбранного каталога, а затем использовать sed
для выполнения замены на месте, используя -execdir
опцию find
, например
find /some/path -type f -execdir sed -i "/model/s#/foo/#/foo/bar/#g" '{}'
Регулярное выражение /model/s#/foo/#/foo/bar/#g
будет работать только со строками, содержащими "model"
и затем использующими альтернативные разделители '#'
для обычной замены всех вхождений "/foo/"
with "/foo/bar/"
, указав 'g'
опцию в конце. (чтобы заменить только первое вхождение "/foo/"
, удалите 'g'
с конца).
Дайте мне знать, если у вас возникнут дополнительные вопросы.