В настоящее время я использую AWK, чтобы найти и заменить часть первых трех вхождений строки. Строка отформатирована как таковая, и в файле есть много таких строк:
func(tempID="39849235",count='12');
Используя эту ссылку , я смог найти метод использования AWK для поиска и замены первых трех экземпляров строки. Я изменил его на то, что мне было нужно, и фрагмент моего скрипта приведен ниже:
id=12349876
awk 'BEGIN {matches=0}
matches < 3 && /.*tempID.*/ { sub(/tempID="[0-9]+"/,"tempID='"$id"'"); matches++ }
{ print $0 }' filName.py >filName.py.changed
Цель приведенного выше кода - найти соответствие в любой строке, содержащей tempID, и заменить число, назначенное для tempID, значением, содержащимся в переменной с именем $id
. Поиск и замена работают хорошо, но, похоже, у меня есть одна проблема: независимо от того, как я это структурирую, выходные данные выводят $ id без кавычек. Я пытался экранировать кавычки и ставить одиночные галочки, но независимо от того, что строка изменена на:
func(tempID=39849235,count='12');
Я попытался удалить двойные кавычки вокруг части замены и структурировать ее как tempID="$id"
, но, к сожалению, это просто заменяет номер идентификатора на строку $id
.
Пожалуйста, дайте мне знать, если есть способ найти и заменить значение tempID и заключить его в кавычки. Я не застрял с AWK, так что любой другой метод с любой другой утилитой, такой как sed, будет работать хорошо.
источник
Чтобы достичь того, что вы хотите сделать, вам необходимо:
Для двойных кавычек:
"
внутри других двойных кавычек.$1 $2
=>foobar
$1" __"$2"__"
=>foo __bar__
$1" \""$2"\""
=>foo "bar"
Для одинарных кавычек:
Оболочка: Выйти из
'…'
всего вашего скрипта awk, используя другой набор'…'
внутри него.'escaped 'unescaped' escaped'
'$LINUX '$OSTYPE' $CPUTYPE'
=>$LINUX linux-gnu $CPUTYPE
Shell: Escape
'
вы хотите, чтобы печататься буквально.'apostrophe that'\''s literal'
=>apostrophe that's literal
Например
источник
echo foo bar | awk '{print "\x22"$1"\042","\x27"$2"\047"}'