SED正则表达式中[方括号]的特殊处理

今天被这个方括号懵晕了,特此记录

例如: 去除输入字符串“1[2.3]4[ab,c]”中的所有方括号和逗号:

$ echo "1[2.3]4[ab,c]"|sed -e "s/[,\]\[]//g"
1[2.3]4[ab,c]
 

It doesn't work!

原因:Regular Expressions

The <right-square-bracket> ( ']' ) shall lose its special meaning and represent itself in a bracket expression if it occurs first in the list (after an initial <circumflex> ( '^' ), if any).

解决方案:关键是要把 ] 右方括号不加escape放在首位.

$ echo "1[2.3]4[ab,c]"|sed -e "s/[][,]//g"
12.34abc

$ echo "1[2.3]4[ab,c]"|sed -e "s/[]\[,]//g"
12.34abc

$ echo "1[2.3]4[ab,c]"|sed -e "s/[],[]//g"
12.34abc
 

The order of some characters is important:

  • - should be at the end like this -]
  • [] should be like that [][other characters]
  • ' should be escaped like that '\''
  • not begin with ^ like in [^
  • not begin with [. [= [: and end with .] =] :]
  • not end with $]

References:

regex - How to escape square closing bracket in sed - Stack Overflow

Regular Expressions

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值