【发布时间】:2013-05-25 11:36:52
【问题描述】:
我需要将 ID 列表从使用由 , 和/或 \r\n 或 \n 组成的分隔符转换为使用 ,|。 (本质上是:s/[,\r\n]+/,\|/g 没有尾随 |)
输入数据示例:
123,456,789,012
或
123,
456
789,
012
我需要得到的输出是123,|456,|798,|012,:每个字段以逗号结尾,并用管道分隔它们。
这看起来很简单,但我对如何管理它感到很困惑。我已经尝试过......实际上有很多方法,但似乎没有任何效果。以下是几个例子:
sed "s/[,\r\n]+/,\|/g" < filename不匹配任何分隔符。sed "s/(,|,?\r?\n?)/,\|/g"也不匹配任何内容。tr -t "(,?(\r|\n)+)" ",\|"和tr -t "[,\r\n]+" ",\|"仅替换,tr "(,|\r?\n)" ",\|"与,一起正常工作,但与,\n和,\r\n一起使用它会用多个条替换匹配的字符。例如:123|||456|||789|||012|变得更复杂:
sed ':a;N;$!ba;s/\n/,/g"(取自here)将\n正确替换为,,但不适用于\r\n。将\n替换为[,\r\n]只会返回输入。
我被难住了。任何人都可以提供一些帮助或建议吗?
【问题讨论】:
-
所以输出最后没有管道?在输出中,
,标记每个字段的结尾,|分隔字段对? -
正确!我本来会在我的帖子中更清楚地说明这一点,但我在工作中被赶出了门。 :(
-
谢谢!是的。我一直在等到今天可以在工作中测试它。