我的意见是:
"INTC_KEY,ABC1|OBJID,ABC2"
我想将输出发送到如下文件:
DDS.INTC_KEY = REPL.OBJID AND DDS.ABC1 = REPL.ABC2
以下是我迄今为止所做的尝试:
sed 's/^/DDS./g' | sed 's/|/=REPL./g' | tr '\n' '~' | sed 's/~/_N~/g' | sed 's/~$/\n/g' | sed 's/~/~\n/g' | sed 's/~/ AND/g' > ${LOG_DIR}/JOIN.tmp
答案 0 :(得分:0)
基于单行输入,以下正则表达式将输入转换为所需的输出:
s/"\([^,]*\),\([^|]*\)|\([^,]*\),\(.*\)"/DDS.\1 = REPL.\3 AND DDS.\2 = REPL.\4/
此shell命令显示它正常工作:
$ echo '"INTC_KEY,ABC1|OBJID,ABC2"' | sed 's/"\([^,]*\),\([^|]*\)|\([^,]*\),\(.*\)"/DDS.\1 = REPL.\3 AND DDS.\2 = REPL.\4/'
DDS.INTC_KEY = REPL.OBJID AND DDS.ABC1 = REPL.ABC2
正则表达式基本上匹配四个文本(使用转义的括号),由逗号和竖线分隔,并作为替换的\1
- \4
反向引用。
注意:我试图坚持使用standard sed
的功能,我使用GNU sed测试,POSIXLY_CORRECT
环境变量设置为1来模拟标准sed。