删除所有内容都有' nth' linux中的逗号

时间:2017-05-16 17:35:16

标签: linux bash sed

我会诚实地说,这里有一些类似的问题,我不知道如何解释答案。任何帮助,将不胜感激。我有一个这样的字符串:

340,A,T,A,A,T,T,A,T,T,T,T,T,A,A,A,A

我想删除第n个逗号之后的所有内容,在这个例子中它可能是第5个逗号,但实际上它将是第170个。

我试过了:

sed -i.back 's/,.*170//'

和此:

's/((?:[^,],){170}).((\s+\S+).*){1,}/$1/g' 

虽然很明显我不知道我在做什么,因为第一个重现整个原始文件而第二个没有产生输出。

3 个答案:

答案 0 :(得分:4)

简单本身:(请注意,最后的逗号是必需的。)

cut -f1-170 -d,

答案 1 :(得分:3)

使用awk你可以这样做:

s='340,A,T,A,A,T,T,A,T,T,T,T,T,A,A,A,A'
awk -v n=5 'BEGIN{FS=OFS=","} {NF=n+1; $(n+1)=""} 1' <<< "$s"

340,A,T,A,A,

或使用sed

sed -E 's/^(([^,]*,){5}).*/\1/' <<< "$s"

340,A,T,A,A,

答案 2 :(得分:0)

这可能适合你(GNU sed);

sed 's/,/&\n/5;P;d' file

在第n个,打印图案空间中的第一行后插入换行符,然后删除其他所有内容。