Заменить строку, содержащую специальные символы, во всех файлах рекурсивно с помощью SED MAC

Заменить строку, содержащую специальные символы, во всех файлах рекурсивно с помощью SED MAC

Я пытался заменить строку на другую, используя SEDon MAC OS X Terminal У меня есть сценарий, в котором мне нужно заменить строку во всех файлах, присутствующих в каталоге, на другую строку. Обе строки сложные и имеют разные специальные символы и знаки.

Как мне его заменить?

Мне нужно заменить

import { wait } from 'path/and-child-path'

с

import { wait } from 'path/path/and-child-path'

То, что я пытался сделать, это

find . -type f | xargs sed -i '' "s@import { wait } from 'path/and-child-path'@import { wait } from 'path/and-child-path'@g"

Это не работает. Пожалуйста, помогите мне.

решение1

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

Исправив эти моменты, выбыв конечном итоге с

find . -type f | xargs sed -i \
"s@import { wait } from 'path/and-child-path'@import { wait } from 'path/path/and-child-path'@g"

Этот код все равно не сработаетв общем случае, поскольку имена файлов могут содержать пробелы (и даже символы новой строки!), которые как раз и xargsиспользуются в качестве разделителей. Так что если у вас есть файл A X, sedбудет указано действовать на файлы Aи X.

-execвариант решает проблему просто:

find . -maxdepth 1 -type f -exec sed -i \
"s@import { wait } from 'path/and-child-path'@import { wait } from 'path/path/and-child-path'@g" {} +

Обратите внимание, я также добавил -maxdepth 1, иначе findпришлось бы спускаться и в подкаталоги.

Связанный контент