Regex 如何在Linux中查找和替换正则表达式模式?
我试图在脚本中查找并替换正则表达式模式Regex 如何在Linux中查找和替换正则表达式模式?,regex,linux,shell,unix,sed,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/".*"
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
但它不起作用 当您只想匹配一个字符时,不应使用
*
星号,因为它是贪婪的,可以匹配尽可能多的字符
所以你只需要s/,/-/
就可以了
但是,如果您想在之前和之后保留任何内容,则可以将它们存储在匹配组括号中,然后反向引用它们,如下所示:
s/(.*),(.*)/\1-\2/
或者在某些搜索引擎中
s/(.*),(.*)/$1-$2/
注意
大多数sed实现不支持非贪婪的
(.*)
。您可以切换到支持它的Perl
为您更新
输入
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的/“*?”/“-”/g”您的文件
输出abc,c,efh,hj35,“-”,02_TG,“-”,gf,g,f,“-”,Thgf-”,0,hg,cj,cj
使用perl:
perl -api -e 's/"[^"]*"/"-"/g' filename
您想要
sed的/,/-/g'
这个吗?您期望的输出是什么?只有,
需要更改为-
?@prudhvipraanth*
并不代表您认为它的意思。示例输入中没有双引号,因此您拥有的正则表达式永远不会匹配。大多数sed
实现不支持非贪婪的(.*)
。您可以切换到支持它的Perl,但这仍然不是完全可靠的,例如,对于带逗号引号的CSV数据。@tripleee,谢谢。是的,你是对的。这个问题没有具体的目的,所以我一般都写了。然后如果问题是关于“
等。然后我的答案将是不同的。@k-five可能是我自己沟通错误。对此表示歉意。但我必须匹配双引号之间的所有字符。谢谢。@PrudhviPrasanth请更新您的问题,以便我能了解您需要什么。如果我的答案对你没有用处,那么告诉我,我会删除它。thanks@k-谢谢你的帮助。我已经用示例输入和预期输出更新了问题。你能帮忙吗???@Toto谢谢。正在工作。@k-five谢谢you@PrudhviPrasanth:不客气。很高兴这有帮助。请随意将答案标记为已接受,请参见: