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

如何使用Sed命令获得以下输出?,sed,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' > ${L

我的意见是:

"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

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

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
反向引用提供


注意:我一直试图坚持使用的功能,并使用GNU sed进行测试,将
POSIXLY_CORRECT
环境变量设置为1以模拟标准sed。

您应该展示一些您已经尝试(或研究)过的证据。嗨,Anthony,这就是我所做的“sed's/^/DDS./g'| sed's/|/=REPL./g'| tr'\n'~'| sed's/~/\n~/g'| sed's/~/\n/g'| sed's/~/和/g'>${LOG\u DIR}/JOIN.tmp“我已经编辑了你的问题以包含这些信息,但最好是你自己编辑问题。总的来说,如果你的问题更清楚,显示出你所做的一些研究,你尝试了什么,你犯了什么错误,等等,那么你将有更好的机会得到好的答案。见谢谢你,安东尼。为了让人们正确地回答这个问题,您还需要显示一系列示例输入,以便人们知道正则表达式应该匹配什么类型的文本,以及不应该匹配什么类型的文本。您提供的上下文越多越好,例如,所有键值对将使用逗号和竖线(
|
)分隔,每行是否正好包含2个键值对?等等。非常感谢。这个现在很好用。我是这个平台的新手。我会处理你提到的事情。会更清楚。欢迎@eshanchitawar,因为这个答案对你有用,你应该点击左边的复选标记。这将问题标记为已回答,并且(使用UPVOUTES)是在堆栈交换站点上表示感谢的方式。欢迎使用Stack Exchange网络!