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


40

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

sed -i 's/${fileWithPath}/HAHA/g' $file

Ответы:


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

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.