如何使用sed或其他Bash命令替换脚本中的指定文本片段
用sed替换脚本中的
exit 0为指定代码块 方法一:直接使用sed命令(推荐)
由于替换内容包含斜杠、反引号等特殊字符,我们可以更换sed的分隔符(比如用|)来避免频繁转义,同时用\n表示换行:
sed -i.bak 's|exit 0|for dev in `ls /dev | egrep "^[sh]d[[:alpha:]][[:digit:]]+$"`; do umount "/dev/"$dev &>/dev/null ; gio mount -u /media/*/* ; gio mount -u /media/$USER/* ; done\nexit 0|' your_script.sh
参数说明:
-i.bak:直接修改原脚本文件,同时生成后缀为.bak的备份文件(防止误操作丢失原内容)s|old|new|:sed的替换命令,用|作为分隔符替代默认的/,避免和替换内容中的/冲突\n:在替换内容中插入换行,对应目标代码块的换行结构- 整个替换字符串用单引号包裹,防止shell解析其中的反引号和变量
方法二:处理多个exit 0的场景
如果脚本中有多个exit 0,只想替换最后一个,可以结合tac反转文件内容,替换第一个匹配项后再反转回来:
tac your_script.sh | sed '0,/exit 0/s//exit 0\nfor dev in `ls /dev | egrep "^[sh]d[[:alpha:]][[:digit:]]+$"`; do umount "/dev/"$dev &>/dev/null ; gio mount -u /media/*/* ; gio mount -u /media/$USER/* ; done/' | tac > temp.sh && mv temp.sh your_script.sh && cp your_script.sh your_script.sh.bak
验证替换结果
执行命令后,可以通过以下命令检查替换是否成功:
grep -A5 -B1 "exit 0" your_script.sh
内容的提问来源于stack exchange,提问作者bremaya
相关产品推荐
相关产品推荐

