Obecnie używam AWK, aby znaleźć i zastąpić część pierwszych trzech wystąpień ciągu. Ciąg jest sformatowany jako taki, aw pliku znajduje się wiele takich ciągów:
func(tempID="39849235",count='12');
Za pomocą tego linku udało mi się znaleźć metodę użycia AWK do znalezienia i zastąpienia pierwszych trzech instancji ciągu. Zmieniłem go na to, co musiałem zrobić, a fragment mojego skryptu znajduje się poniżej:
id=12349876
awk 'BEGIN {matches=0}
matches < 3 && /.*tempID.*/ { sub(/tempID="[0-9]+"/,"tempID='"$id"'"); matches++ }
{ print $0 }' filName.py >filName.py.changed
Celem powyższego kodu jest dopasowanie w dowolnym wierszu zawierającym tempID i zastąpienie liczby przypisanej do tempID wartością przechowywaną w zmiennej o nazwie $id
. Znajdź i zamień działa dobrze, ale wydaje mi się, że jedynym problemem jest to, że bez względu na to, jak je zbuduję, dane wyjściowe wypisują $ id bez cudzysłowów. Próbowałem uciec od cytatów i wstawiać pojedyncze tiki, ale niezależnie od tego, czy zmieniono wiersz na:
func(tempID=39849235,count='12');
Próbowałem usunąć podwójne cudzysłowy wokół części zamiennej i nadać jej taką strukturę tempID="$id"
, ale niestety to po prostu zastępuje numer identyfikacyjny ciągiem $id
.
Daj mi znać, jeśli istnieje sposób, aby znaleźć i zastąpić wartość tempID i otoczyć wartość cudzysłowami. Nie utknąłem z AWK, więc każda inna metoda z jakimkolwiek innym narzędziem, takim jak sed, również działałaby dobrze.
źródło
Aby osiągnąć to, co chcesz zrobić, musisz:
W przypadku podwójnych cytatów:
"
w innych podwójnych cudzysłowach.$1 $2
=>foobar
$1" __"$2"__"
=>foo __bar__
$1" \""$2"\""
=>foo "bar"
W przypadku pojedynczych cytatów:
Powłoka: Wyjdź
'…'
z całego skryptu awk, używając innego zestawu'…'
.'escaped 'unescaped' escaped'
'$LINUX '$OSTYPE' $CPUTYPE'
=>$LINUX linux-gnu $CPUTYPE
Shell: Ucieczka,
'
którą chcesz wydrukować dosłownie.'apostrophe that'\''s literal'
=>apostrophe that's literal
Na przykład
źródło
echo foo bar | awk '{print "\x22"$1"\042","\x27"$2"\047"}'