Ahoj, jak mohu použít gsub k nahrazení slova, které má závorky.
Tady Chci nahradit ABC (T) ABC / G
awk " {gsub("ABC\(T\)","ABC/G")}; Print $0" "$FILENAME" > tmp.tmp && mv tmp.tmp "$FILENAME"
Odpovědět
Dalo by se to celé zjednodušit, pokud použijete formát // pro gsub:
$ echo "ABC(T)" | awk "{gsub(/ABC\(T\)/,"ABC/G")}; print $0" ABC/G
Potom byste mohli dále zjednodušit pomocí print bez argumentů (což je stejné jako print $0) nebo zkratka pro tisk 1 (výchozí awk akce pro výrazy, které se hodnotí jako pravdivé, například 1; má vytisknout aktuální řádek):
$ echo "ABC(T)" | awk "{gsub(/ABC\(T\)/,"ABC/G")}1" ABC/G
Osobně bych ale nepoužil awk za tímto účelem je syntaxe kratší a čistší s jinými nástroji:
$ echo "ABC(T)" | sed "s|ABC(T)|ABC/G|" ABC/G $ echo "ABC(T)" | perl -pe "s|ABC\(T\)|ABC/G|" ABC/G
Odpovědět
Byli jste si velmi blízcí. Právě jste potřebovali dva \. Je to proto, že jeden z množiny je pro samotný text procházející BASH a druhý by byl skutečný \, který je analyzován awk. Zdá se, že to pro mě funguje:
echo "ABC(T)" | awk " {gsub("ABC\\(T\\)","ABC/G")}; Print $0" "$FILENAME"
A dává:
ABC/G