小编hau*_*ech的帖子

如何在嵌入在bash脚本中的sed脚本中转义反斜杠

我想通过bash脚本中的sed脚本编辑文件.我希望以后容易维护; 易于理解和修改.替换字符串如下所示:

PS1='\[\e[1;32m\][\u@\h \W]\$\[\e[0m\]'
Run Code Online (Sandbox Code Playgroud)

在一个完美的世界里,它会喜欢这样:

sed -i "s/^PS1.*$/PS1='\[\e[1;32m\][\u@\h \W]\$\[\e[0m\]'/g" /etc/skel/.bashrc
Run Code Online (Sandbox Code Playgroud)

问题是bash和sed正在剥离\文件中给出以下结果:

PS1='[e[1;32m][@h W]$[e[0m]'
Run Code Online (Sandbox Code Playgroud)

显然单引号不能使用.一个强力解决方案是使用转义,但为了这个工作我得到一个非常难看的线:

sed -i "s/^PS1.*$/PS1='\\\\[\\\\e[1;32m\\\\][\\\\u@\\\\h \\\\W]\\\\$\\\\[\\\\e[0m\\\\]'/g" /etc/skel/.bashrc
Run Code Online (Sandbox Code Playgroud)

我希望脚本是可读的和自包含的(不使用外部文件).以上任何替代方案?

bash escaping sed

8
推荐指数
1
解决办法
6882
查看次数

标签 统计

bash ×1

escaping ×1

sed ×1