Я пытаюсь запустить sed, чтобы заменить какой-то текст в файле, и я разбил текст на части, запустил sed для него по отдельности, чтобы убедиться, что все экранировано правильно и работает. Когда я соединяю все это вместе, это ничего не меняет. Может кто-нибудь сказать, пожалуйста, что я делаю не так?

Это команда, которую я запускаю

sed -i -e 's/"php"   => \x27\x27,/"php"   => \x27\/opt\/remi\/php70\/root\/usr\/sbin\/php-fpm\x27,/g'

Это должно измениться

"php"   => '',

в

"php"   => '/opt/remi/php70/root/usr/sbin/php-fpm',

Я подумал, что это может быть как-то связано с пробелами из-за того, что код имеет отступ или что-то, в чем я пробовал пару вещей, но я никуда не попал.

Это в блоке, который выглядит так:

    $pathToExternals = array(
            "php"   => '',                  // Something like /usr/bin/php. If empty, will be found in PATH.
            "curl"  => '',                  // Something like /usr/bin/curl. If empty, will be found in PATH.
            "gzip"  => '',                  // Something like /usr/bin/gzip. If empty, will be found in PATH.
            "id"    => '',                  // Something like /usr/bin/id. If empty, will be found in PATH.
            "stat"  => '',                  // Something like /usr/bin/stat. If empty, will be found in PATH.
    );

Любые указатели будут с благодарностью!

Спасибо

1 ответ1

1

Похоже, что ваш исходный файл может иметь несколько вкладок, в то время как команда sed предполагала только пробелы. Чтобы выполнить замену независимо от того, состоит ли пустое пространство из пробелов или вкладок, попробуйте:

sed -i -e 's/"php"[[:space:]]*=>[[:space:]]*\x27\x27,/"php" => \x27\/opt\/remi\/php70\/root\/usr\/sbin\/php-fpm\x27,/g'

[[:space:]]* соответствует нулю или более любого символа пробела.

Как указывает alhadis , мы можем избежать необходимости избегать / если мы используем другой разделитель для команды замены. Например, мы можем выбрать |:

sed  -e 's|"php"[[:space:]]*=>[[:space:]]*\x27\x27,|"php"   => \x27/opt/remi/php70/root/usr/sbin/php-fpm\x27,|g'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .