我在一个文本文件中有一组数据,如下所示:
(1,2,3),(A,B,C),(4,5,6)
我希望这些括号段在各自的行上,保留它们之间的逗号:
(1,2,3),
(A,B,C),
(4,5,6)
我尝试了sed
、tr
和awk
的许多组合,但都没有产生预期的结果。它们将数据放在一行中,并添加一个r或n,或者将下一行的第一个左括号去掉,或者它们有其他的解析问题。
这最终在我的本地计算机(Linux)上起作用了:
sed -r 's/\),\(+/\),\r\(/g' file > file
但它在我需要它工作的远程服务器上失败了(FreeBSD)。我还没有找到任何可以在FreeBSD中工作的东西。
我已经干了好几个小时了。任何帮助都将不胜感激。谢谢!
发布于 2018-06-01 22:49:38
虽然您不能(轻松地)在使用sed的替换模式中使用'\n‘转义序列,但您可以通过在行尾使用反斜杠来放置一个实际的换行符。
从标准输入
# echo '(1,2,3),(A,B,C),(4,5,6)' | sed -e 's/),/),\
/g'
(1,2,3),
(A,B,C),
(4,5,6)
从文件
# sed -e 's/),/),\
/g' infile
我用FreeBSD 11.2和Arch Linux对此进行了测试。
发布于 2018-06-03 05:59:54
试一下这个:
$ echo '(1,2,3),(A,B,C),(4,5,6)' | sed -e $'s/),/),\\\n/g'
注意$''
,它将有助于用真正的换行符替换\n
,通过执行以下操作进行测试:
$ echo $'s/),/),\\\n/g'
s/),/),\
/g
您将需要sh
,如果您使用的是FreeBSD中的默认csh
外壳,它将不起作用。
如果你不能改变外壳并且只有csh
,这是可行的:
$ echo '(1,2,3),(A,B,C),(4,5,6)' | perl -pe 's/\),/\),\n/g'
这两个选项都将输出:
(1,2,3),
(A,B,C),
(4,5,6)
https://stackoverflow.com/questions/50643772
复制相似问题