linux sed中转义字符的替换

背景

在使用sed的时候,经常我们会用来替换字符串,如果被替换的字符串中包含转移字符串怎么办?

比如:如果用下面的这种方式,就会替换失败

source="testabc"
replace="testsdfa/dfe"
# 替换失败
result=$(echo $source | sed -e "s/a/$replace/g")

具体的报错信息:

sed: 1: "s/a/testsdfa/dfe/g
": bad flag in substitute command: 'd'

解决方法

第一种对/进行转义

source="testabc" 
replace="testsdfa\/dfe"
# 替换失败 
result=$(echo $source | sed -e "s/a/$replace/g")

但是这样的话,如果出现其他的转义字符还是得手动更改

第二种方式使用通配得方式,就行转义替换,参考地址: Escape a string for a sed replace pattern - Stack Overflow

# 通过以下通配的方式
sed -e 's/[]\/$*.^[]/\\&/g'

如何解读:

  • match_pattern[]\/$*.^[]
    • 其实它是一个bracket group,实际上是[ ]\/$*.^[ ]的结构
    • 匹配]\/$*.^[中的任一字符
  • replace_pattern\\&
    • 这个replace_pattern用到了一个转义字符和一个特殊字符
    • 转义字符\\表示的就是\
    • 特殊字符&表示的是match_pattern匹配到的内容

替换语句就是把]\/$*.^[前面全部加上一个斜杠,进行转义

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值