A gsub használata az awk-ban egy szó zárójeles helyettesítésére

Szia, hogyan használhatom a gsub-ot egy zárójeles szó helyettesítésére.

Itt Az ABC-t (T) az ABC / G-re akarom cserélni

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

Válasz

Egyszerűsítheti az egészet, ha a // formátumot használja a gsub fájlhoz:

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

Ezután tovább egyszerűsítheti a print használatával argumentumok nélkül (ami megegyezik a print $0) a 1 gyorsírás a nyomtatáshoz (az alapértelmezett awk művelet olyan kifejezések esetében, amelyek igaznak minősülnek, például / div> az aktuális sor kinyomtatása):

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

Személy szerint azonban nem használnám a awk ehhez a szintaxis rövidebb és tisztább más eszközökkel:

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

Válasz

Nagyon közel álltál egymáshoz. Csak két \ kellett. Ennek az az oka, hogy az egyik készlet a szövegnek önmagában a BASH-on keresztül halad, a másik pedig a tényleges \ lenne, amelyet az awk elemez. Úgy tűnik, ez nekem működik:

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

És ezt adja:

ABC/G 

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük