如何更换每个换行符的逗号,但前提是它们不在括号之间?

时间:2011-08-31 20:34:10

标签: bash sed

我想知道你是否可以帮助我在这里尝试替换脚本......

我有这样的事情:

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 ) )

3 个答案:

答案 0 :(得分:1)

为了不丢失该数字,您需要使用(转义)括号捕获它,然后将其替换为\1,如下所示:

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

答案 1 :(得分:0)

快速而肮脏的修复:使用enter替换和<]&gt ;.

答案 2 :(得分:0)

以下是一个适合您案例的解决方案:

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

它的作用是在范围A-Z或a-z中的任何字符或空格后替换逗号。然后替换所有],次出现。似乎完全按照自己的意愿行事。我不是regexpsed专家,最有可能写得更好,所以不要怪我: - )