Вы должны понимать, что \{
является особенным в sed
. Итак, вам нужно это:
#!/bin/sh
# filename: yourscript.sh
# usage: ./yourscript.sh 44 33 22
for arg; do set "$@" " 0x$arg"; shift; done
IFS=",";
sed -e "/byte address\[\]/s/{[^}]*}/{$* }/" yourfile.c
When invoked as:
% ./yourscript.sh 44 33 22
byte address[] = { 0x44, 0x33, 0x22 };
шестнадцатеричные
числа из аргументов. Это мы получаем, перебирая список аргументов, используя цикл for
. Каждый раз мы добавляем шестнадцатеричную версию текущего аргумента в конец списка аргументов $@
, в то же время удаляя текущий аргумент shift
из начала списка. список. Это означает, что в конце итераций цикла for
мы получим шестнадцатеричный
список аргументов. IFS
на запятую для соединения аргументов с запятой. "$*"
внутри замещающей части sed
s///
. awk
нужно знать разделитель ,
. Таким образом, вы должны выполнить команду таким образом:
awk -F\, '{printf "update my_table_user set thirdparty_user_id=\'%s\' where thirdparty_user_id=\'%s\'\;", $(NF-1),$(NF)}' /tmp/Region1\ users.csv
Также, если формат входного файла соответствует (трем полям, вы получите 1-е и 2-е )вы можете использовать $1
и$2
В этом случае вам нужно действовать осторожно, так как у вас есть два слоя чередующихся кавычек:
|-------------------------- 1 ------------------------|--2 --|------------- 3 ----------|--4 --|----- 5 ----|
awk -F, '{printf "update my_table_user set thirdparty_user_id='\'%s\'' where thirdparty_user_id='\'%s\'';\n", $2,$3}' yourcsvfile
Обратите внимание, что области 2 и 4 являются пробелами (без кавычек ), и туда мы вставляем наши одинарные кавычки и строки %s. Области 1,3,5 являются сбалансированными парами в одинарных кавычках. Области 1..5 являются смежными. Мы можем поместить %s в пробел как есть, поскольку они не являются метасимволами оболочки, такими как *? $ [ иначе нам пришлось бы экранировать их или помещать в непробельные области, такие как 3.
Другим способом является предоставление цитаты через переменную awk:
awk -F, -v q=\' '{v2=q $2 q;v3=q $3 q;printf "update my_table_user set thirdparty_user_id=%s where thirdparty_user_id=%s;\n", v2,v3}' yourcsvfile
Здесь мы сначала создаем одиночные -кавычки, заключенные в кавычки, и затем используем их в нашем printf. Я считаю, что это более удобно -для пользователя.