如何使用Sed命令获得以下输出?

时间:2016-05-12 08:10:36

标签: sed

我的意见是:

"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

1 个答案:

答案 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。