Bash 如何将特殊字符回显到文件中?
我有一个shell脚本,它可以做各种事情 其中,它检查/etc/rc.local中是否存在某一行,如果该行不存在,我想将其添加到文件中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
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,这就是我要删除的行。