[英]Shell Help to replace double quotes
需要幫助將雙引號替換為轉義字符,請找到以下一行代碼:
echo -e "nzsql -d $f1 -c" \"alter table $f3.$f2 ALTER COLUMN $f4 SET DEFAULT $v5\"
output 是:
nzsql -d DD -c "alter table SCHEMA.DD ALTER COLUMN CD_ID SET DEFAULT '-9999' "
nzsql -d DD -c "alter table SCHEMA.DD ALTER COLUMN LMT_ID SET DEFAULT 99' "
nzsql -d DD -c "alter table SCHEMA.DD ALTER COLUMN PPN_TM SET DEFAULT "TIMESTAMP"('now(0)'::"VARCHAR") "
nzsql -d DD -c "alter table SCHEMA.DD ALTER COLUMN SRC_STM_ID SET DEFAULT '-9999' "
nzsql -d DD -c "alter table SCHEMA.DD ALTER COLUMN UNQ_ID_IN_SRC_STM SET DEFAULT 'MISSING_VALUE'::"NVARCHAR" "
nzsql -d DD -c "alter table SCHEMA.DD ALTER COLUMN END_DT SET DEFAULT '9999/12/31' "
nzsql -d DD -c "alter table SCHEMA.DD ALTER COLUMN EFF_DT SET DEFAULT '1900/01/01' "
nzsql -d DD -c "alter table SCHEMA.DD ALTER COLUMN ISRT_RUN_ID SET DEFAULT '-9999' "
nzsql -d DD -c "alter table SCHEMA.DD ALTER COLUMN UDT_RUN_ID SET DEFAULT '-9999' "
nzsql -d DD -c "alter table SCHEMA.DD ALTER COLUMN UDT_RUN_ID SET DEFAULT -9999 "
nzsql -d DD -c "alter table SCHEMA.DD ALTER COLUMN UDT_RUN_ID SET DEFAULT 9999 "
nzsql -d DD -c "alter table SCHEMA.DD ALTER COLUMN UDT_RUN_ID SET DEFAULT Now() "
nzsql -d DD -c "alter table SCHEMA.DD ALTER COLUMN LAST_VRSN_F SET DEFAULT '1' "
我正在使用上面的命令來准備 alter table 語句
下面是V5值
'-9999'
'-9999'
"TIMESTAMP"('now(0)'::"VARCHAR")
'-9999'
'MISSING_VALUE'::"NVARCHAR"
'9999/12/31'
'1900/01/01'
'-9999'
'-9999'
9999
Now()
now(0)
'1'
我只需要做的是,如果 v5 值有"
那么只需將其替換為\"
和 rest 如果它有單引號或沒有引號則必須保持不變。
我試過
v5=`sed $v5/"/\"`
和
v5=`echo ${v5/"/\"/}`
不工作。
試試這個:
v5="$(echo "$v5" | sed 's/"/\\"/g')"
# this is your original command without any changes
echo -e "nzsql -d $f1 -c" \"alter table $f3.$f2 ALTER COLUMN $f4 SET DEFAULT $v5\"
解釋:
echo "$v5" | sed
echo "$v5" | sed
:sed 從 STDIN 讀取 $v5;'s/"/\\"/
:將"
替換為\"
但僅針對行中第一次出現的"
;g
:對行中每次出現的"
應用替換。 如果您使用bash4
或更高版本,則可以省略echo
:
v5="$(sed 's/"/\\"/g' <<<"$v5")"
正如您在問題末尾提到的,您可以省略sed
並使用本機bash
的替換:
VAR="${VAR//\"/\\\"}"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.