Home > Net >  Cannot use sed with regex via script
Cannot use sed with regex via script

Time:12-11

I have the following .sed script:

# replace female-male with F-M

s/female/F/ 
s/male/M/

# capitalize the name when the sport is football or handball

s/^([^,]*,)([^,] )((,[^,]*){5},(football|handball),)/\1\U\2\L\3/

# match missing height or weight values

/^[^,]*,([^,]*,){4},([^,]*,)([^,]*,[^,]*,){2}/d
/^[^,]*,([^,]*,){5},([^,]*,[^,]*,)([^,]*,){2}/d

And the following csv file (first 10 lines)


id,name,nationality,sex,date_of_birth,height,weight,sport,gold,silver,bronze,info
736041664,A Jesus Garcia,ESP,male,1969-10-17,1.72,64,athletics,0,0,0,
532037425,A Lam Shin,KOR,female,1986-09-23,1.68,56,handball,0,0,0,
435962603,Aaron Brown,CAN,male,1992-05-27,1.98,79,athletics,0,0,1,
521041435,Aaron Cook,MDA,male,1991-01-02,1.83,80,taekwondo,0,0,0,
33922579,Aaron Gate,NZL,male,1990-11-26,1.81,,cycling,0,0,0,
173071782,Aaron Royle,AUS,male,1990-01-26,1.80,67,triathlon,0,0,0,
266237702,Aaron Russell,USA,male,1993-06-04,,98,volleyball,0,0,1,
382571888,Aaron Younger,AUS,male,1991-09-25,1.93,100,football,0,0,0,
87689776,Aauri Lorena Bokesa,ESP,female,1988-12-14,1.80,62,athletics,0,0,0,

The output must be done by the following command

sed -f script.sed ./file.csv

The problem I have is that despite making sure the regex is matching all the pertinent lines, I can only get it to replace the female-male values with F-M, the rest of the file is still the exact same. Files are not being deleted, and names are not being capitalized.

If I run each regex directly (i.e 'sed -E 's/^([^,],)([^,] )((,[^,]){5},(football|handball),)/\1\U\2\L\3/' file.csv') it works. But I need to do it via script, and with -f.

What am I missing? Thank you.

CodePudding user response:

You still need to indicate that you're using extended regular expresssions:

sed -Ef script.sed file.csv

Otherwise, sed uses basic regular expressions, where escaping rules are different, specifically for () for capture groups, and {} for counts.

CodePudding user response:

Have you tried using sed -Ef <script> <csv file>? You need -E to use extended regex expressions.

  • Related