如何在逗号分隔的括号数据中插入换行符?
How to insert line breaks into comma-separated parenthetical data?
我在文本文件中有一组数据,如下所示:
(1,2,3),(A,B,C),(4,5,6)
我希望那些带括号的部分在他们自己的行上,保留它们之间的逗号:
(1,2,3),
(A,B,C),
(4,5,6)
我尝试了很多 sed
和 tr
以及 awk
的组合,但是其中 none 产生了我想要的结果。他们将数据留在一行并添加了 r 或 n,或者他们在下一行吃掉第一个左括号,或者他们有其他解析问题。
这终于在我的本地计算机上运行了 (Linux):
sed -r 's/\),\(+/\),\r\(/g' file > file
但它在我需要它工作的远程服务器 (FreeBSD) 上失败了。我还没有找到任何适用于 FreeBSD 的东西。
我已经在这里待了几个小时了。任何帮助都将不胜感激。谢谢!
虽然您不能(轻易地)在 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 测试了这个。
试试这个:
$ 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
shell,将无法工作。
如果您无法更改 shell 而只有 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)
我在文本文件中有一组数据,如下所示:
(1,2,3),(A,B,C),(4,5,6)
我希望那些带括号的部分在他们自己的行上,保留它们之间的逗号:
(1,2,3),
(A,B,C),
(4,5,6)
我尝试了很多 sed
和 tr
以及 awk
的组合,但是其中 none 产生了我想要的结果。他们将数据留在一行并添加了 r 或 n,或者他们在下一行吃掉第一个左括号,或者他们有其他解析问题。
这终于在我的本地计算机上运行了 (Linux):
sed -r 's/\),\(+/\),\r\(/g' file > file
但它在我需要它工作的远程服务器 (FreeBSD) 上失败了。我还没有找到任何适用于 FreeBSD 的东西。
我已经在这里待了几个小时了。任何帮助都将不胜感激。谢谢!
虽然您不能(轻易地)在 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 测试了这个。
试试这个:
$ 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
shell,将无法工作。
如果您无法更改 shell 而只有 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)