Bash 如何将特殊字符回显到文件中?

Bash 如何将特殊字符回显到文件中?,bash,sed,echo,special-characters,Bash,Sed,Echo,Special Characters,我有一个shell脚本,它可以做各种事情 其中,它检查/etc/rc.local中是否存在某一行,如果该行不存在,我想将其添加到文件中 grep reboot "/etc/rc.local" || echo -e "sed -i 's/\^reboot//g' $script" >> /etc/rc.local 问题是我无法在文件中插入特殊字符“^” grep reboot "/etc/rc.local" || echo -e "sed -i 's/\^reboot//g' $sc

我有一个shell脚本,它可以做各种事情

其中,它检查/etc/rc.local中是否存在某一行,如果该行不存在,我想将其添加到文件中

grep reboot "/etc/rc.local" || echo -e "sed -i 's/\^reboot//g' $script" >> /etc/rc.local
问题是我无法在文件中插入特殊字符“^”

grep reboot "/etc/rc.local" || echo -e "sed -i 's/\^reboot//g' $script" >> /etc/rc.local
因此,如果我只运行该行,而不重定向到/etc/rc.local:

# grep reboot  "/etc/rc.local" || echo -e 'sed -i "s/\^reboot//g" $script' >> /etc/rc.local
sed -i 's/reboot//g' /root/1.sh
您可以看到,回显行未命中“^”

我试过使用和不使用echo的“-e”开关,试过使用双引号/单引号。。。什么都不管用——我似乎无法回应这个特殊的字符

我做错了什么

$ cat inputfile
some reboot
reboot
some reboot other
删除只有
重新启动
而没有其他功能的行

$ sed '/^reboot$/d' inputfile
some reboot
some reboot other
使用
-i
将其删除到位并覆盖
输入文件

删除只有
重新启动
而没有其他功能的行

$ sed '/^reboot$/d' inputfile
some reboot
some reboot other
使用
-i
将其就地删除并覆盖
输入文件

要删除开头有“重新启动”的行,请使用

grep -v '^reboot' /etc/rc.local > result
要删除开头有“重新启动”的行,请使用

grep -v '^reboot' /etc/rc.local > result

为什么在任何脚本中都需要
^reboot
而不是
reboot
?此脚本升级内核,然后重新启动并继续运行。/etc/rc.local中的这一行应该在再次运行以完成其余任务之前从脚本中删除“reboot”命令-这样做是为了避免进入重新启动循环。我希望该命令只删除脚本中包含reboot命令的行,从而删除行中作为reboot命令的“^”。脚本中还有其他地方需要重新启动,但我不想触及其他行,只想触及实际重新启动的行。我的问题仍然存在,为什么要literal
^reboot
?或者您正在寻找行,其中只有
reboot
,而没有其他内容?确切地说,只有一行只包含reboot,这就是我要删除的行。与仅
reboot
相比,为什么在任何脚本中都需要
^reboot
?此脚本升级内核,然后重新启动并继续运行。/etc/rc.local中的这一行应该在再次运行以完成其余任务之前从脚本中删除“reboot”命令-这样做是为了避免进入重新启动循环。我希望该命令只删除脚本中包含reboot命令的行,从而删除行中作为reboot命令的“^”。脚本中还有其他地方需要重新启动,但我不想触及其他行,只想触及实际重新启动的行。我的问题仍然存在,为什么要literal
^reboot
?或者您正在查找行,其中只有
reboot
,而没有其他内容?确切地说,只有一行只包含reboot,这就是我要删除的行。