在 Linux(BusyBox、QNAP-NAS)上,我想使用 sed 通过脚本向我的 .bashrc
文件添加一些额外的路径。该文件的相关部分如下所示:
[...]
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 插入(或附加)带有尾部反斜杠的行?
提前致谢。
最佳答案
解决方法如下:
sed '4s|^|/opt/bin:/opt/sbin:\\\n|' .bashrc
关于linux - 使用 sed 插入(或追加)以尾部反斜杠 (\) 结尾的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4106254/