Заголовок: “3h”

Вопрос или проблема

Я пытаюсь использовать 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' мы используем одинарные кавычки, чтобы точно указать, что именно эта строка будет заменена.

Вы можете выбрать любой из предложенных вариантов в зависимости от ваших предпочтений по стилю кода. Оба подхода должны работать правильно, и они обеспечат необходимую замену строки в указанном файле.

Оцените материал
Добавить комментарий

Капча загружается...