如何在Linux中查找和替换正则表达式模式?

时间:2017-02-07 06:06:58

标签: regex linux shell unix sed

我正在尝试在脚本中查找并替换正则表达式模式。现有字符串将类似于

  Input Sample :  abc,c,efh,hj35,"2,6ag=a193",02_TG,",,,,10,,f,,",gf,g,f,,"1720a5",Thgf"18,dhg;_,2,53",0,hg,cj,cj
  Expected Output :  abc,c,efh,hj35,"-",02_TG,"-",gf,g,f,,"-",Thgf"-",0,hg,cj,cj

和我的替换字符串如“ - ”。我尝试过的代码是

sed -e 's/".*"/"-"/g filename

但它没有用!

2 个答案:

答案 0 :(得分:0)

如果只想匹配一个字符,则不应使用*星号,因为它是贪婪的,并尽可能多地匹配。

所以你只需要s/,/-/就可以了。

但是如果你想保留之前的 之后的,那么你可以将它们存储在 match-group 括号中,然后反向引用它们,如下所示:

s/(.*?),(.*?)/\1-\2/
或某些搜索引擎
s/(.*?),(.*?)/$1-$2/

注意
大多数sed实现不支持非贪婪的(.*?)。您可以切换到支持它的Perl

为您更新
intput
abc,c,efh,hj35,"2,6ag=a193",02_TG,",,,,10,,f,,",gf,g,f,,"1720a5",Thgf"18,dhg;_,2,53",0,hg,cj,cj

perl -pe 's/".*?"/"-"/g' your-file

<强>输出
abc,c,efh,hj35,"-",02_TG,"-",gf,g,f,,"-",Thgf"-",0,hg,cj,cj

prove

答案 1 :(得分:0)

使用perl:

perl -api -e 's/"[^"]*"/"-"/g' filename