Regex&Sed:我想用三个条件AND替换一个字符串

Ωlo*_*stA 1 regex terminal replace sed command-line-interface

我尝试在正则表达式中混合两个条件并且没有成功...

,当行包含三个条件时,我想删除一个:
- 以第二个逗号中的,
- 包含开头- ,,,在行中总共
计算9逗号

要更改的行的示例:

=> ,BRQSSQDFACKE JURFSDFGEN,,,Vitsasdfaan, 11,9660,LOCHRISTI,BELGIË,NL
=> SCURTUSDF,Daniqsdel,Mr.,Tombqsdqfsdferg, Rodqsdfqsfqst, 17,4000,SANKT VITH,BELGIQUE,FR   
Run Code Online (Sandbox Code Playgroud)

更改行的结果:

=> ,BRQSSQDFACKE JURFSDFGEN,,Vitsasdfaan, 11,9660,LOCHRISTI,BELGIË,NL
=> SCURTUSDF,Daniqsdel,Mr.,Tombqsdqfsdferg, Rodqsdfqsfqst, 17,4000,SANKT VITH,BELGIQUE,FR
Run Code Online (Sandbox Code Playgroud)

我尝试了这个,但它不完整......

sed '/^\([^,]*,\)\{9\}[^,]*$/s/,//2'
Run Code Online (Sandbox Code Playgroud)

anu*_*ava 5

awk 由于逗号分隔输入中的多个条件,因此更适合此作业.

你可以使用:

awk -F, 'NF == 10 && $1 $3 $4 == "" {sub(/,,,/, ",,")} 1' file
Run Code Online (Sandbox Code Playgroud)

,BRQSSQDFACKE JURFSDFGEN,,Vitsasdfaan, 11,9660,LOCHRISTI,BELGIË,NL
SCURTUSDF,Daniqsdel,Mr.,Tombqsdqfsdferg, Rodqsdfqsfqst, 17,4000,SANKT VITH,BELGIQUE,FR
Run Code Online (Sandbox Code Playgroud)

  • @Tiw:确实这个答案比另一个早4秒发布:) (2认同)