问题
Below is the what I have tried
The sed command has to change the 3rd line's 3rd and 4th columns and intent is to change only line starting with sox4d2.
File content :
sox4d4 ;/appl/m4d4/current ;TEXTMX40 ;TEXTMX40 ;
sox4d5 ;/appl/m4d5/current ;TEXTMX40 ;TEXTMX40 ;
sox4d2 ;/appl/m4d2/current ;TEXTMX40 ;TEXTMX40 ;
Expected content
sox4d4 ;/appl/m4d4/current ;TEXTMX40 ;TEXTMX40 ;
sox4d5 ;/appl/m4d5/current ;TEXTMX40 ;TEXTMX40 ;
sox4d2 ;/appl/m4d2/current ;TEXTM30 ;TEXTM30 ;
I would like to change just the values of 3rd and 4th columns of line 3
Below is the sed I ran but here I am directly searching for string but not the column number:
sed -i "/sox4d2 /s/TEXTMX40/TEXTM30/g", file.txt
I would like to run this command from perl script actually. Below is the snippet in the perl script , but even here I didn't use the column number:
my $db_host = "TEXTM30";
my $ser=srnmain.intranet
system(
'ssh' => ('-q',$ser),
sed => ( '-i',qq(/sox4d2/s/\bTEXTMX40\b/$db_host/),$dest_file),
);
回答1:
With sed how about:
sed -i -E '/sox4d2 /s#([^;]+;[^;]+;)[^;]+;[^;]+#\1TEXTMX30 ;TEXTMX30 #' file.txt
If perl is your option, following will also work:
perl -F' ;' -i -ape '$F[2] = $F[3] = "TEXTMX30" if /sox4d2 /; $_ = join(" ;", @F)' file.txt
回答2:
With shown samples could you please try following. Written and tested in GNU awk. This should be more Generic solution, give line numbers in line variable, give column names in columns variable and give their respective values in vals variable with comma separated.
awk -v line="3" -v columns="3,4" -v vals="TEXTMX30,TEXTMX30" '
BEGIN{
num=split(columns,arr1,",")
num2=split(line,arr3,",")
for(k=1;k<=num2;k++){
lines[arr3[k]]
}
split(vals,arr2,",")
for(i=1;i<=num;i++){
values[arr1[i]]=arr2[i]
}
}
(FNR in lines){
for(i=1;i<=NF;i++){
if(i in values){ $i=";"values[i] }
}
}
1' Input_file
回答3:
You may consider this awk:
awk 'BEGIN {FS=OFS=" ;"} $1 == "sox4d2" {$3=$4="TEXTMX30"; $5=""} 1' file
sox4d4 ;/appl/m4d4/current ;TEXTMX40 ;TEXTMX40 ;
sox4d5 ;/appl/m4d5/current ;TEXTMX40 ;TEXTMX40 ;
sox4d2 ;/appl/m4d2/current ;TEXTMX30 ;TEXTMX30 ;
来源:https://stackoverflow.com/questions/66096674/search-for-a-pattern-change-just-the-3rd-and-4th-columns-of-a-file-using-sed-o