使用sed插入(或追加)以尾部反斜杠(\)结尾的行

时间:2010-11-05 13:32:10

标签: linux sed

在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插入(或追加)带有反斜杠的行? 提前谢谢。

3 个答案:

答案 0 :(得分:1)

这是一种解决方法:

sed '4s|^|/opt/bin:/opt/sbin:\\\n|' .bashrc

答案 1 :(得分:1)

如果有任何帮助,我会使用四个反斜杠在一行的末尾附加一个没有空格的反斜杠。

我的命令如下:

sed "1i #backtrace_script\n#!/bin/sh\ngeany -si \\\\" \

导致

 #!/bin/sh
 geany -si \

答案 2 :(得分:0)

看起来像busybox sed中的错误。它适用于GNU sed 4.2.1。