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