用主机名变量和双引号替换bashrc上的sed

时间:2012-12-14 09:36:56

标签: bash sed escaping

我很难在/ etc / bashrc上找到sed替换的解决方案

我喜欢更改行

PS1="\u@\h NEW [\w]# "

这个

PS1="\u@\h.hostname.com NEW [\w]# "    

其中hostname.com

HOST=$(hostname)

尝试几种情况,但没有逃脱,但没有。

另见另一个问题How do I escape backslashes in a sed script embedded in a bash script,但我迷路了。

通常我使用“”来使用$ {VARIABLE}但不起作用,如果使用\ for escape

sed -i "s/^PS1.*$/PS1=\"\\u@\\h.${HOST}\ \[\\w\]#\ \"/g" /etc/bashrc

2 个答案:

答案 0 :(得分:2)

如果您想在提示中输入完整的主机名,请使用\H。那么您就不必担心这个sed替换。

将您的PS1更改为:

PS1="\u@\H NEW [\w]# "    

如果您想使用sed,则以下命令应该有效:

sed 's/\(^.*\h\)\(.*$\)/\1.'"$HOST"'\2/g' /etc/bashrc

答案 1 :(得分:0)

经过多次测试,我得到了一个解决方案。

HOST=$(hostname); sed -i "s/^PS1.*$/PS1=\"\\\u@\\\h.${HOST}\ \[\\\w\]#\ \"/g" /etc/bashrc

Afert阅读用户dogbane的评论y更改为

sed -i "s/^PS1.*$/PS1=\"\\\u@\\\H\ \[\\\w\]#\ \"/g" /etc/bashrc

...谢谢