我正在尝试编写一个脚本来替换该行:
[ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\$ "
用那一行:
# [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\$ "
这将添加新行:
[ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \D{%T} \W]\\$ "
到/etc/bashrc
文件。基本上,我希望脚本注释旧设置并在提示中的用户名旁边添加时间戳(新设置)。我试图做这样的第一部分:
pattern=' [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\$ "'
sudo sed 's/${pattern}/#${pattern}/' < /etc/bashrc
但它没有用,我认为这是因为字符串中的特殊字符。但我不确定我需要逃避哪些字符。最后一部分应该是这样的:
sed -i ' [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \D{%T} \W]\\$ "' /etc/bashrc
将获得一些指导。
谢谢
sed
可防止${pattern}
扩展 。您必须使用双引号(但这会导致提到的特殊字符问题)sed
足够给定行的寻址来识别它,然后插入如下注释:/^ *\[ *"$PS1 =/s/^/#/
a
命令sed
追加给定行在您的情况下,您只想在该行中添加一些内容,所以
如果您想在没有正则表达式的情况下替换整行,您也可以先获取行号:
并用注释模式和新行替换该行:
几个月后阅读这个也更清楚。
出于测试目的,我总是喜欢先 sed 进入一个临时文件(没有 -i 选项),然后再重命名它,这样我就不会损害我的配置。
但我也发现此方法不适用于包含
[,],$ and &
的模式,这些模式还需要按以下顺序进行一些屏蔽:这导致以下功能:
要使用 sed 进行这种复杂模式的替换:
您必须以
pattern
这种方式强制评估:在尝试触摸
/etc/bashrc
和使用之前,检查这是否完全达到了您对临时文件的要求sudo
(此外,在使用之前,sudo
您应该检查您是否真的使用了正确的文件,以避免使用假文件)。