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