首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Shell帮助替换双引号

Shell帮助替换双引号
EN

Stack Overflow用户
提问于 2020-08-19 09:12:58
回答 1查看 96关注 0票数 0

需要帮助替换转义字符的双引号,请查找以下一行代码:

代码语言:javascript
复制
echo -e "nzsql -d $f1 -c" \"alter table $f3.$f2 ALTER COLUMN $f4 SET DEFAULT $v5\" 

产出如下:

代码语言:javascript
复制
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语句。

下面是V5值

代码语言:javascript
复制
'-9999'
'-9999'
"TIMESTAMP"('now(0)'::"VARCHAR")
'-9999'
'MISSING_VALUE'::"NVARCHAR"
'9999/12/31'
'1900/01/01'
'-9999'
'-9999'
9999
Now()
now(0)
'1'

我只需要做的是,如果v5值有",那么就用\"替换它,如果它有单引号或没有引号,则其余的必须保持不变。

我试过了

代码语言:javascript
复制
v5=`sed $v5/"/\"`

代码语言:javascript
复制
v5=`echo ${v5/"/\"/}`

不起作用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-19 10:44:29

试试这个:

代码语言:javascript
复制
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:sed用\"从STDIN;
  • 's/"/\\"/:替代"读取$v5,但仅对line;
  • g:中第一次出现的"应用替换行中的每一次"

如果使用bash4或更高版本,则可以省略echo

代码语言:javascript
复制
v5="$(sed 's/"/\\"/g' <<<"$v5")"

正如您在问题末尾提到的,您可以省略sed并使用本机bash的替代:

代码语言:javascript
复制
VAR="${VAR//\"/\\\"}"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63483718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档