На этот вопрос уже есть ответ здесь:
У меня есть несколько каталогов и подкаталогов, содержащих текст файлы. Мне нужно изменить определенную строку этих текстовых файлов для всех каталогов и подкаталогов. Я использовал приведенную ниже команду sed для выполнения этой задачи:
find ./ -type f -exec sed -i -e 's/old_line/new_line/g' {} \;
Она работает, если в old_line и new_line нет места. Но это не работает для примера ниже:
old_line=5704550660 SPP91564_2 ANT # / TYPE
new_line=5704550660 SPP91564_2 NONE ANT # / TYPE
когда я добавляю эти строки в приведенную выше команду sed, я получаю;
sed: -e expression #1, char 56: unknown option to `s'
Как я могу изменить приведенную выше команду, чтобы она работала правильно для приведенного выше примера?
Это не пробелы, это вызывает проблему, но /
в тексте. Ваши чтения команды: sed 's/570455066 .../ TYPE/5704550660.../ TYPE/g'
- Вы видите проблему? Необходимо использовать другой символ в качестве разделителя, который не появляется в тексте замены, говорит :
sed 's:5704550660 SPP91564_2 ANT # / TYPE:5704550660 SPP91564_2 NONE ANT # / TYPE:g'
, можно также просто выйти /
в тексте с обратной косой чертой: \/
.