2011-08-31 40 views
3

我在想,如果你能帮我更换脚本我尝试在这里...如何替换每个换行符的逗号,但前提是它们不在括号之间?

我有这样的事情:

aaaaaa,aaaaa,aaaaa,aaaa,aaaaa,aaa,aaa,aaa,aaaa,aaa 
aaaa,aaaaa,aaaaa,aaaaaaa,aaa[1,2], aaaaaaaa[5,6], aaaa,aaaaaaa 

并想订购的文件,要达到这样的:

aaaaaa, 
aaa, 
aaaaa, 
aaaaa[1,2], 
aaaaaaaa[5,6], 
aaaaa, 
aaaaaaaa, 
aaaa 

我试着换行符替换,,但它的[n,n]块分开了。

也尝试用换行符替换,[^0-9],但我松开逗号后的第一个字符。

我一直在尝试sed,但我不知道这是怎么回事。

我已经添加了文件的样本:

x0.fieldB [1,2] ,x5.fieldC ,x0.fieldX ,x0.fieldA 
(x0.fieldE [1,5] = x2.fieldZ)) AND (x0.fieldG [1,2] = x3.fieldT)) 

,应该得到这样的:

x0.fieldB [1,2] , 
x5.fieldC , 
x0.fieldX , 
x0.fieldA (x0.fieldE [1,5] = x2.fieldZ)) AND (x0.fieldG [1,2] = x3.fieldT)) 

回答

1

为了不失去这个数字,你需要使用(转义)括号捕捉到它,然后用\1代替它,如下所示:

sed 's/\([^0-9]\),/\1\n/g' yourfile 
0

快速和肮脏的解决办法:更换和<]>,以进入。

+0

sed's/\([^ 0-9] \),/ \ 1 \ n/g'yourfile为我工作 感谢您的所有时间 – TheMadCapLaughs27

0

这里是一个解决方案,你的情况的工作:

sed -e 's;\([A-Za-z \t]\),;\1,\n;g' -e 's;],;],\n;g' 

它所做的是在范围AZ或az或空格中的任何字符后替换逗号。然后替换所有发生的],。似乎正是你想要的。我不是regexpsed专家,很有可能写得好多了,所以不要怪我:-)

相关问题