ved hjælp af gsub i awk til at erstatte et ord med parenteser

Hej hvordan kan jeg bruge gsub til at erstatte et ord med parenteser.

Her Jeg vil erstatte ABC (T) med ABC / G

awk " {gsub("ABC\(T\)","ABC/G")}; Print $0" "$FILENAME" > tmp.tmp && mv tmp.tmp "$FILENAME" 

Svar

Du kan forenkle det hele, hvis du bruger // -formatet til gsub:

$ echo "ABC(T)" | awk "{gsub(/ABC\(T\)/,"ABC/G")}; print $0" ABC/G 

Derefter kan du forenkle yderligere ved at bruge print uden argumenter (hvilket er det samme som print $0) eller 1 stenografi til udskrivning (standard awk handling for udtryk, der vurderes til sandt, såsom 1; er at udskrive den aktuelle linje):

$ echo "ABC(T)" | awk "{gsub(/ABC\(T\)/,"ABC/G")}1" ABC/G 

Personligt vil jeg dog ikke bruge awk til dette er syntaksen kortere og renere med andre værktøjer:

$ echo "ABC(T)" | sed "s|ABC(T)|ABC/G|" ABC/G $ echo "ABC(T)" | perl -pe "s|ABC\(T\)|ABC/G|" ABC/G 

Svar

Du var meget tæt. Du havde lige brug for to \. Det skyldes, at det ene sæt er for selve teksten, der passerer gennem BASH, og det andet er den egentlige \, som bliver analyseret af awk. Dette ser ud til at virke for mig:

echo "ABC(T)" | awk " {gsub("ABC\\(T\\)","ABC/G")}; Print $0" "$FILENAME" 

Og giver:

ABC/G 

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *