我想通過bash腳本中的sed腳本編輯文件。我希望以後很容易維護這個;易於理解和修改。替換字符串的樣子:如何在嵌入bash腳本的sed腳本中轉義反斜槓
PS1='\[\e[1;32m\][\[email protected]\h \W]\$\[\e[0m\]'
在一個完美的世界,這將是這樣的:
sed -i "s/^PS1.*$/PS1='\[\e[1;32m\][\[email protected]\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\\\\][\\\\[email protected]\\\\h \\\\W]\\\\$\\\\[\\\\e[0m\\\\]'/g" /etc/skel/.bashrc
我希望腳本爲可讀的,自包含的(不使用外部文件)。上述的任何替代方案?
圍繞像regex這樣的任何東西使用單引號,除非你絕對需要一些插入到字符串中的變量。即使如此,在大多數正則表達式中使用單引號,只能在必須插入的部分周圍使用雙引號。使用一個組成的例子:'sed -e's /\.\*'"$ 1「'\ * \ ./ ab'」$ 2「'c'\''d /'$ 3'或者沿着這些線。序列'''''是您如何在命令行中嵌入單引號的方式;第一個單引號結束了當前的單引號部分;反斜槓引用將單個引號嵌入到字符串中;第三個單引號恢復單引號。 – 2012-01-04 14:16:35