Вопрос или проблема
Я пытаюсь использовать sed, чтобы заменить строку, такую как ’12h’, на ‘3h’
sed -i 's/length_s="12h"/length_s="3h"/g' my_files
но это не сработало
Это потому, что у вас есть одинарные кавычки внутри одинарных кавычек. Оболочка не понимает, что является чем. Либо замените внешние кавычки на двойные, либо экранируйте внутренние кавычки, чтобы оболочка знала, что нужно воспринимать их как буквальные кавычки, а не интерпретировать.
Решение 1:
sed -i "s/length_s="12h"/length_s="3h"/g" my_files
Решение 2:
sed -i 's/length_s = \\'12h\\'/length_s = \\'3h\\'/g' my_files
Ответ или решение
Для решения вашей задачи по замене строки ’12h’ на ‘3h’ с помощью sed
, необходимо учитывать, что использование одинарных кавычек внутри одинарных кавычек приведёт к ошибке интерпретации. Рассмотрим два подхода для корректного выполнения команды.
Решение 1
Вы можете использовать двойные кавычки снаружи и одинарные внутри. Это позволит избежать конфликта кавычек.
sed -i "s/length_s='12h'/length_s='3h'/g" my_files
Решение 2
Если вы предпочитаете использовать одинарные кавычки для обозначения строки замены, вы можете экранировать одинарные кавычки внутри команды с помощью обратного слэша (\
), что позволит корректно интерпретировать их как литералы.
sed -i 's/length_s=\'12h\'/length_s=\'3h\'/g' my_files
Объяснение
В обеих решениях:
-i
указываетsed
на то, что изменения следует применять непосредственно к файлу (в данном случаеmy_files
).s/.../.../g
— это синтаксис для замены:s
означает "заменить", аg
указывает, что следует заменять все вхождения строки в каждой строке файла.- В строке замены
'12h'
мы используем одинарные кавычки, чтобы точно указать, что именно эта строка будет заменена.
Вы можете выбрать любой из предложенных вариантов в зависимости от ваших предпочтений по стилю кода. Оба подхода должны работать правильно, и они обеспечат необходимую замену строки в указанном файле.