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

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

sed -i 's/${fileWithPath}/HAHA/g' $file
40
задан 4 May 2017 в 00:18

3 ответа

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

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

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

0
ответ дан 4 May 2017 в 00:18

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

sed -i "s|my/path|my/other/path|g" myFileOfPaths.txt
0
ответ дан 4 May 2017 в 00:18

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

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

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

0
ответ дан 4 May 2017 в 00:18

Другие вопросы по тегам:

Похожие вопросы: