1

/etc/bashrc で sed 置換の解決策を見つけるのに疲れました

ラインを変えるのが好き

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

このため

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

どこで hostname.com

HOST=$(hostname)

エスケープ \ を使用して、いくつかの置換を試みますが、何もしません。

また、別の質問「bash スクリプトに埋め込まれた sed スクリプトでバックスラッシュをエスケープするにはどうすればよいですか?」も参照してください。

通常、 ${VARIABLE} を使用するために "" を使用しますが、エスケープに \ を使用する場合も機能しません

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

2 に答える 2

2

\Hプロンプトで完全なホスト名が必要な場合に使用します。sedそうすれば、この置換について心配する必要はありません。

次のように変更PS1します。

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

を使用する場合sedは、次のコマンドが機能するはずです。

sed 's/\(^.*\h\)\(.*$\)/\1.'"$HOST"'\2/g' /etc/bashrc
于 2012-12-14T09:43:02.523 に答える
0

いくつかのテストの後、私は解決策を得ました。

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

ユーザーからのコメントを読んだ後、dogbane y に変更します

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

ありがとう...

于 2012-12-14T10:31:12.830 に答える