我有这个部分SQL字符串。
select ID,to_char(ts2date(created_t),'DD-MM-YYYY'),name,segment_code from sometable
使用sed,我尝试用字符串char'〜'替换位于最外面括号之外的任何逗号。
期望的结果是: -
select ID~to_char(ts2date(created_t),'DD-MM-YYYY')~name~segment_code from sometable
这是我尝试过的: -
sed '
:a
s/[,]\(.*(\)/~\1/g
s/\().*\)[,]/\1~/g
ta
但结果变成: -
select ID~to_char(ts2date(created_t)~'DD-MM-YYYY')~name~segment_code from sometable
如何忽略最外面括号内的逗号?
任何答案的TQ .. :)
答案 0 :(得分:1)
使用纯sed正则表达式无法实现这样的目标。常规自动机无法识别正确/不正确的包围及其深度(因此正则表达式无法识别)。
如果您希望使用“正则表达式”来实现此目标,则可能需要使用perl及其前瞻/后视功能。或者写一个简单的循环来检查包围。
答案 1 :(得分:1)
sed是单行简单替换的绝佳工具。对于任何其他文本操作,只需使用awk:
$ awk '{
match($0,/\(.*\)/)
head = substr($0,1,RSTART-1)
tail = substr($0,RSTART+RLENGTH)
gsub(/,/,"~",head)
gsub(/,/,"~",tail)
print head substr($0,RSTART,RLENGTH) tail
}' file
select ID~to_char(ts2date(created_t),'DD-MM-YYYY')~name~segment_code from sometable
不可能更直接......