2014-01-14 29 views
0

更换每第七个逗号我有一个看起来像这样的列表:求一个正则表达式的 n

11, 11, 12, 12, "abc", 3, 1, 25, 25, 30, 30, "def", 1, 1, ...... 

,我想改变它,所以它看起来是这样的:

11, 11, 11, 11, "abc", 3, 1 
25, 25, 30, 30, "def", 1, 1 
.... 

所以我想用\ n替换每第七个逗号。

我尝试过使用sed,但无法使其正常工作。任何人都可以给我一个提示吗? 在此先感谢

回答

4

试试这个:

sed -e -r 's/(([^,]+,){6}[^,]+), /\1\n/g' 
+0

这就是我得到的 sed:-e表达式#1,字符29:无效的引用\ 1's'命令的RHS – KrawallKurt

+0

我添加了'-e'标志...尝试一下。如果失败,请在此输入您正在输入的内容(如果与我的回答中的命令不同)。你确实意识到你必须通过sed一些输入吗?例如'cat myfile | sed ...'或者你可以给它一个文件:'sed -e's /.../.../ g'myfile' – Bohemian

+0

我已经在-e之前添加了-e。无法使用或不使用..我完全复制并粘贴您的代码并将其与管道猫一起使用,不起作用。问题似乎是,它没有得到\ 1部分,不知道为什么... – KrawallKurt

0

您可以使用此:

(([^,]+, ?){7}) 

而且随着$1\n取代。

sed语法的不确定,但这里的一起玩的表达:http://regex101.com/r/oH8oK3

+0

这不会保留第7个逗号吗? – Bohemian

+0

@Bohemian是的,它会的。你赢了:) – brandonscript

+0

同样用sed,后面的引用是'\ 1'不是'$ 1'(为什么他们不能一致!?) – Bohemian

0
sed 's/, */\^J/7' 
# or 
sed 's/,[[:blank:]]*/\^J/7' 

同时删除尾随空格(或空白像标签也)选项-posix与GNU sed]

1

这可能适用于您(GNU sed):

sed 's/,\s*/\n/7;P;D' file