我希望能够通过bash脚本中的sed脚本来编辑一个文件。我的目标是让这个脚本易于维护、易于理解和修改。替换字符串的格式如下:
PS1='\[\e[1;32m\][\u@\h \W]\$\[\e[0m\]'
在一个完美的世界中,它应该是这样的:
sed -i "s/^PS1.*$/PS1='\[\e[1;32m\][\u@\h \W]\$\[\e[0m\]'/g" /etc/skel/.bashrc
问题在于bash和sed会去除
\
,导致文件中出现以下结果:PS1='[e[1;32m][@h W]$[e[0m]'
很明显,不能使用单引号。一种暴力解决方法是使用转义字符,但这样做会得到一行非常丑陋的代码:
sed -i "s/^PS1.*$/PS1='\\\\[\\\\e[1;32m\\\\][\\\\u@\\\\h \\\\W]\\\\$\\\\[\\\\e[0m\\\\]'/g" /etc/skel/.bashrc
我希望脚本易读且自包含(不使用外部文件)。有没有其他替代方案?
sed -e 's/\.\*'"$1"'\*\./ab'"$2"'c'\''d/' $3
或类似的命令。序列'\''
是如何嵌入单引号到命令行中的;第一个单引号结束当前的单引号段;反斜杠-引号将单引号嵌入到字符串中;第三个单引号恢复单引号。 - Jonathan Leffler