[英]replace complex string with sed
Trying to find and replace PS1="[\\u@\\h \\W]\\\\$ "
with something like: PS1='\\[\\e[0;31m\\][\\u@\\h \\W]\\$\\[\\e[m\\] '
in /etc/bashrc
file with sed has been failed because of two levels of interpretion: bash and sed iteself. 尝试查找PS1="[\\u@\\h \\W]\\\\$ "
并将其替换PS1="[\\u@\\h \\W]\\\\$ "
: PS1='\\[\\e[0;31m\\][\\u@\\h \\W]\\$\\[\\e[m\\] '
带有sed的/etc/bashrc
文件中的PS1='\\[\\e[0;31m\\][\\u@\\h \\W]\\$\\[\\e[m\\] '
已失败,因为有两种解释级别:bash和sed iteself。
How should I replace those complex strings using bash and sed? 我应该如何使用bash和sed替换那些复杂的字符串?
I built the expression piece by piece, up to the following: 我逐段构建了表达式,直到以下内容:
sed 's/PS1="\[\\u@\\h \\W]\\\\\$ "/PS1='\''\\[\\e[0;31m\\][\\u@\\h \\W]\\$\\[\\e[m\\] '\'/
Here are some of the steps: 以下是一些步骤:
echo 'PS1="[\u@\h \W]\\$ "' \
| diff <(sed s/a/b/)
<(PS1=\''\[\e[0;31m\][\u@\h \W]\$\[\e[m\] '\')
echo 'PS1="[\u@\h \W]\\$ "' \
| diff <(sed 's/PS1="\[//')
<(echo PS1=\''\[\e[0;31m\][\u@\h \W]\$\[\e[m\] '\')
echo 'PS1="[\u@\h \W]\\$ "' \
| diff <(sed 's/PS1="\[\\u@\\h//')
<(echo PS1=\''\[\e[0;31m\][\u@\h \W]\$\[\e[m\] '\')
echo 'PS1="[\u@\h \W]\\$ "' \
| diff <(sed 's/PS1="\[\\u@\\h \\W]//')
<(echo PS1=\''\[\e[0;31m\][\u@\h \W]\$\[\e[m\] '\')
echo 'PS1="[\u@\h \W]\\$ "' \
| diff <(sed 's/PS1="\[\\u@\\h \\W]\\\\\$ "//')
<(echo PS1=\''\[\e[0;31m\][\u@\h \W]\$\[\e[m\] '\')
Here we are matching correctly the whole input, so we can start outputting: 在这里,我们正确匹配了整个输入,因此我们可以开始输出:
echo 'PS1="[\u@\h \W]\\$ "' \
| diff <(sed 's/PS1="\[\\u@\\h \\W]\\\\\$ "/PS1='\''/')
<(echo PS1=\''\[\e[0;31m\][\u@\h \W]\$\[\e[m\] '\')
echo 'PS1="[\u@\h \W]\\$ "' \
| diff <(sed 's/PS1="\[\\u@\\h \\W]\\\\\$ "/PS1='\''\\[\\e/')
<(echo PS1=\''\[\e[0;31m\][\u@\h \W]\$\[\e[m\] '\')
echo 'PS1="[\u@\h \W]\\$ "' \
| diff <(sed 's/PS1="\[\\u@\\h \\W]\\\\\$ "/PS1='\''\\[\\e[0;31m\\][\\u@\\h \\W]\\$\\[\\e[m\\] /')
<(echo PS1=\''\[\e[0;31m\][\u@\h \W]\$\[\e[m\] '\')
echo 'PS1="[\u@\h \W]\\$ "' \
| diff <(sed 's/PS1="\[\\u@\\h \\W]\\\\\$ "/PS1='\''\\[\\e[0;31m\\][\\u@\\h \\W]\\$\\[\\e[m\\] '\'/)
<(echo PS1=\''\[\e[0;31m\][\u@\h \W]\$\[\e[m\] '\')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.