Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何在Linux中查找和替换正则表达式模式?_Regex_Linux_Shell_Unix_Sed - Fatal编程技术网

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:不客气。很高兴这有帮助。请随意将答案标记为已接受,请参见: