použití gsub v awk k nahrazení slova závorkami

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 

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *