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

标签 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 插入(或附加)带有尾部反斜杠的行? 提前致谢。

最佳答案

解决方法如下:

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

关于linux - 使用 sed 插入(或追加)以尾部反斜杠 (\) 结尾的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4106254/

相关文章:

ruby-on-rails - Phusion Passenger 未启动 - flock':没有可用的锁 @ rb_file_flock -/vagrant/tmp/pids/passenger.3000.pid.lock (Errno::ENOLCK)

linux - 当 Dockerfile 存在于该文件夹中时,如何将任何文件夹复制到 Docker 容器?

sed - grep + grep + sed = sed : no input files

linux - 如何获取 iostat 第二个样本

bash - 使用 tac combo sed/awk/grep/? 提取最后 5 分钟的系统日志数据 (750mb)

linux - "make -C X"与 "cd X; make"

c - 如何以线程友好的方式读取文本文件(字典)

linux - 如何在项目中设置自定义 crontab 文件?

linux - grep 获取特定字节并将其放入从文件到新文件的列中 {shell 脚本]

ssh - 如何从 ssh 配置文件中删除主机条目?