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