sed删除的字符串中带有特殊字符,并且字符串是用变量表示的

最近在学shell,刚接触sed对文件内容的操作,由于操作不慎,删除系统中rc.local中所有的内容。需要反思

1、对文件的操作前,对源文件备份,备份很重要

2、总结sed的删除操作,避免以后重蹈覆辙

来源:项目的一个小小的要求,根据指定的字符串,删除对应文本中的字符串

指定的字符串是用变量表示,并且带有特殊字符,每次变量都可能发生变化

例子:变量v1=/opt/test/1/   文本路径 /opt/conf    文本中的内容/opt/test/1/&

有三种方法:

注意:这时直接用: sed -i "/${v1}/d" /opt/conf 是不行的!

思路1:将变量v1字符串改变为\/opt\/test/1\/&,也就是加个转义字符

v2=${v1//\//\\/}

使用v2变量来寻找并删除文本中的字符串

sed -i "/${v2}/d" /opt/conf

思路2:先用sed命令将此要删除的路径替换度为一个文件中不可能出现的知唯一字符串,然后再通过正则匹配该字符串删除该行。可以写在一条sed语句中。注意单引号

v1=/opt/test/1/

sed -i 's#'${v1}'#EXCLUSIVE#;/EXCLUSIVE/d' /opt/conf

思路3:grep也支持正则,可以使用grep -v反向过滤。

v1=/opt/test/1/

grep -v "${v1}" /opt/conf >output

mv output /opt/conf

你可能感兴趣的:(linux,linux,特殊字符,sed命令删除)