Я хотел бы заменить $fileWithPath
в $file
, однако это не работает , потому что (я думаю) путь не спасся. Как избежать этого?
sed -i 's/${fileWithPath}/HAHA/g' $file
sed -i 's|'$fileWithPath'|HAHA|g' file
Одинарные кавычки определяют строковый литерал. Помещение переменной за пределы литерала позволяет оболочке расширять эту часть.
Также: если вы собираетесь анализировать пути, используйте разделитель в команде sed, который не следует путать с разделителем каталога "/".
$fileWithPath
есть пробелы, вставляется неправильный шаблон.sed -i 's|auth-user-pass nordvpn.txt|auth-user-pass /etc/openvpn/nordvpn.txt|g' *.ovpn
Кажется, мой пример работает.Лучший способ для буквенных строк с косой чертой:
источник
В тех случаях, когда строка замены или строка шаблона содержат косую черту, вы можете использовать тот факт, что GNU sed позволяет использовать альтернативный разделитель для команды замены. Распространенным выбором для разделителя является символ трубы | или хэш # - лучший выбор символа-разделителя часто зависит от типа обрабатываемого файла. В вашем случае вы можете попробовать
Символ «g» после последнего # используется для изменения всех вхождений в файле, если вам нужно изменить только первое вхождение, а затем удалить «g».
источник