В Linux (BusyBox, QNAP-NAS) я хочу добавить дополнительный путь к моему .bashrc
файлу через скрипт с использованием sed.Соответствующая часть файла выглядит следующим образом:
[...]
export PATH=\
/bin:\
/sbin:\
/usr/bin:\
/usr/sbin:\
/usr/local/bin
[...]
Дополнительная строка для вставки (в позиции 4 в исходном файле) - /opt/bin:/opt/sbin:\
.Чтобы это сделать, мой однострочный sed выглядит следующим образом:
sed '4i/opt/bin:/opt/sbin:\\' .bashrc > .bashrc.tmp
, правильно экранируя обратную косую черту.Каким-то образом sed преобразует оставшиеся \'
в новую строку, поедая обратную косую черту, в результате чего:
[...]
export PATH=\
/opt/bin:/opt/sbin:
/bin:\
[...]
Добавление третьей обратной косой черты дает мне обратную косую черту, но все равно добавляет новую строку, поэтому
sed '4i/opt/bin:/opt/sbin:\\\' .bashrc > .bashrc.tmp
приводит к
export PATH=\
/opt/bin:/opt/sbin:\
/bin:\
Если я добавлю лишний пробел в моей команде sed
sed '4i/opt/bin:/opt/sbin:\\ ' .bashrc > .bashrc.tmp
все будет хорошо, но я получу лишний пробел в конце строкиа также.
export PATH=\
/opt/bin:/opt/sbin:\ # extra space here
/bin:\
На данный момент уловка была второй командой sed, удаляющей завершающие пробелы
#!/bin/sh
sed -e '4i/opt/bin:/opt/sbin:\\ ' .bashrc > .bashrc.tmp
sed -e 's/[ \t]*$//' .bashrc.tmp > .bashrc.tmp2 # change \t to real tab
Но все же я удивляюсь, почему sed превращает \'
в новую строку, а как решить вышеописанную работу с помощью простого однострочного?Как я могу вставить (или добавить) строку с обратной косой чертой, используя sed?Заранее спасибо.