Как избежать пути к файлу в SED?

40

Я хотел бы заменить $fileWithPathв $file, однако это не работает , потому что (я думаю) путь не спасся. Как избежать этого?

sed -i 's/${fileWithPath}/HAHA/g' $file
UAdapter
источник

Ответы:

72
sed -i 's|'$fileWithPath'|HAHA|g' file

Одинарные кавычки определяют строковый литерал. Помещение переменной за пределы литерала позволяет оболочке расширять эту часть.

Также: если вы собираетесь анализировать пути, используйте разделитель в команде sed, который не следует путать с разделителем каталога "/".

ата
источник
1
Помните, что, если $fileWithPathесть пробелы, вставляется неправильный шаблон.
Лекенштейн
Ваш бонусный совет об изменении разделителя для путей к файлам спасет вас!
Шадониня
Я думаю, что у вас слишком много цитат в вашей команде. sed -i 's|auth-user-pass nordvpn.txt|auth-user-pass /etc/openvpn/nordvpn.txt|g' *.ovpnКажется, мой пример работает.
Лео Леопольд Герц 준영
15

Лучший способ для буквенных строк с косой чертой:

sed -i "s|my/path|my/other/path|g" myFileOfPaths.txt
Джефф Ланкастер
источник
Этот заслужил Оскар! Простой и элегантный
Тоан Нгуен
15

В тех случаях, когда строка замены или строка шаблона содержат косую черту, вы можете использовать тот факт, что GNU sed позволяет использовать альтернативный разделитель для команды замены. Распространенным выбором для разделителя является символ трубы | или хэш # - лучший выбор символа-разделителя часто зависит от типа обрабатываемого файла. В вашем случае вы можете попробовать

sed -i 's#'$fileWithPath'#HAHA#g' $file

Символ «g» после последнего # используется для изменения всех вхождений в файле, если вам нужно изменить только первое вхождение, а затем удалить «g».

c0m3t
источник