2016-05-12 30 views
-2

我输入的是:如何使用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

嗨安东尼,这是我做的“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

我编辑了您的问题以包含该信息 - 但最好是自己编辑问题。一般来说,如果问题更清楚,您将有更好的机会得到良好的答案,显示您已完成的一些研究,您尝试过的方法,您得到的错误等。请参阅[我如何问一个好问题?](http://stackoverflow.com/help/how-to-ask) –

回答

0

基础的在单行输入上,以下正则表达式将将输入转换为所需输出:

s/"\([^,]*\),\([^|]*\)|\([^,]*\),\(.*\)"/DDS.\1 = REPL.\3 AND DDS.\2 = REPL.\4/ 

此外壳命令显示它的工作:

$ 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。

+0

谢谢您多安东尼。现在工作正常。我是这个平台的新手。我会照顾你提到的事情。会更清楚。 –

+0

不客气@EshanChintawar由于这个答案适合你,你应该[接受它](https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)通过点击左边的复选标记。 这标志着问题*答案*和(与upvotes)是谢谢堆栈交换网站表达的方式。 欢迎来到Stack Exchange网络! –