У меня есть несколько каталогов и подкаталогов, включая текстовые файлы. Мне нужно изменить конкретную строку этих текстовых файлов для всех каталогов и подкаталогов. Я использовал ниже команду 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'
Вы также можете просто выйти из / в тексте с помощью обратной косой черты: \/.
Это не те места, которые вызывают проблему, но / в тексте. Ваша команда читает: sed 's/570455066 .../ TYPE/5704550660.../ TYPE/g' - вы видите проблему? Вы должны использовать другой символ в качестве разделителя, который не отображается в заменяющем тексте, например :
sed 's:5704550660 SPP91564_2 ANT # / TYPE:5704550660 SPP91564_2 NONE ANT # / TYPE:g'
Вы также можете просто выйти из / в тексте с помощью обратной косой черты: \/.
Это не те места, которые вызывают проблему, но / в тексте. Ваша команда читает: sed 's/570455066 .../ TYPE/5704550660.../ TYPE/g' - вы видите проблему? Вы должны использовать другой символ в качестве разделителя, который не отображается в заменяющем тексте, например :
sed 's:5704550660 SPP91564_2 ANT # / TYPE:5704550660 SPP91564_2 NONE ANT # / TYPE:g'
Вы также можете просто выйти из / в тексте с помощью обратной косой черты: \/.