user3764960
user3764960

Reputation:

replace word in line only if line number start with + csv file

I use the following sed command in order to replace string in CSV line

( the condition to replace the string is to match the number in the beginning of the CSV file )

SERIAL_NUM=1


sed "/$SERIAL_NUM/ s//OK/g" file.csv

the problem is that I want to match only the number that start in the beginning of the line ,

but sed match other lines that have this number

example:

in this example I want to replace the word - STATUS to OK but only in line that start with 1 ( before the "," separator )

so I do this

 SERIAL_NUM=1


 more file.csv


 1,14556,43634,266,242,def,45,STATUS
 2,4345,1,43,57,24,657,SD,STATUS
 3,1,WQ,435,676,90,3,44f,STATUS


 sed -i "/$SERIAL_NUM/ s/STATUS/OK/g" file.csv


 more file.csv

 1,14556,43634,266,242,def,45,OK
 2,4345,1,43,57,24,657,SD,OK
 3,1,WQ,435,676,90,3,44f,OK

but sed also replace the STATUS to OK also in line 2 and line 3 ( because those lines have the number 1 )

please advice how to change the sed syntax in order to match only the number that start the line before the "," separator

remark - solution can be also with perl line liner or awk ,

Upvotes: 4

Views: 850

Answers (2)

G. Cito
G. Cito

Reputation: 6378

Since this answer was ranked fifth in the Stackoverflow perl report but had no perl content, I thought it would be useful to add the following - instead of removing the perl tag :-)

#!/usr/bin/env perl
use strict;
use warnings; 

while(<DATA>){
  s/STATUS/OK/g if /^1\,/;
  print ;
}

__DATA__
1,14556,43634,266,242,def,45,STATUS
2,4345,1,43,57,24,657,SD,STATUS
3,1,WQ,435,676,90,3,44f,STATUS

or as one line:

perl -ne 's/STATUS/OK/g if /^1\,/;' file.csv

Upvotes: 0

anubhava
anubhava

Reputation: 785621

You can use anchor ^ to make sure $SERIAL_NUM only matches at start and use , after that to make sure there is a comma followed by this number:

sed "/^$SERIAL_NUM,/s/STATUS/OK/g" file.csv

Upvotes: 3

Related Questions