So awk
può fare la sostituzione di testo/stringa con sub()
e gsub()
come:Qualcuno può spiegarmi perché awk's sub()/gsub() funziona in questo modo?
kent$ echo "fffff"|awk '{gsub("f", "b")}1'
bbbbb
o
kent$ echo "fffff"|awk '{gsub(/f/, "b")}1'
bbbbb
Comunque oggi ho fatto un errore errore di battitura, ho scritto la linea come:
kent$ echo "fffff"|awk '{gsub('f', "b")}1'
Ma awk
non si lamentava di ciò ma generava output come al solito, ovviamente, uscita inaspettata, mi ci è voluto un po 'di tempo per scoprire l'errore. L'uscita awk
mi ha dato è stata:
bfbfbfbfbfb
un altro esempio:
kent$ echo "fafafafafXX"|awk '{gsub('fa', "B")}1'
BfBaBfBaBfBaBfBaBfBXBXB
esempio con sub()
è strano troppo:
kent$ echo "thanks in advance"|awk '{sub('a', "B")}1'
Bthanks in advance
Qualcuno mi potrebbe spiegare come è stato fatto la strana sostituzione?
kent$ awk --version
GNU Awk 4.0.2
EDIT
grazie per la risposta da Joni. forse questo esempio lo spiega meglio, ho appena aggiungo qui:
kent$ echo "thanks in advance"|awk '{f="k";sub('f', "B")}1'
thanBs in advance
kent$ echo "thanks in advance"|awk '{sub('th ank', "B")}1'
awk: cmd. line:2: {sub(th
awk: cmd. line:2: ^unexpected newline or end of string
+1, sembra ragionevole. – Kent
Sto pensando che questo potrebbe essere un trucco da usare, anche se è un po 'rischioso. :) – Kent