使用unix魔法替换第n个角色

时间:2012-07-20 08:55:30

标签: unix replace awk

我有一大堆这样的文字:

ABCD,DEF,geff,HIJ,KLMN,NOP,QRS,TUV,WXYZ,....

你们可以帮我用awk或任何unix(mac)魔法用换行替换第4个逗号(,)!

3 个答案:

答案 0 :(得分:2)

仅更改第4个逗号:

sed 's/\(\([^,]*,\)\{3\}[^,]*\),/\1\n/'

(注意:急于显示a much cooler way to do this):s/,/\n/4

要更改每个第4个逗号,请添加g标记:

$ echo 'abcd,def,geff,hij,klmn,nop,qrs,tuv,wxyz,....' |\
> sed 's/\(\([^,]*,\)\{3\}[^,]*\),/\1\n/g'
abcd,def,geff,hij
klmn,nop,qrs,tuv
wxyz,....

这是sed reference

简而言之,命令找到模式

(( non-commas - comma ) (3 times) - (non-commas)) comma

并将其更改为

"whatever is in outer brackets" + newline.

答案 1 :(得分:2)

要替换第4 ,次出现,您可以使用:

echo "abcd,def,geff,hij,klmn,nop,qrs,tuv,wxyz,...." | sed 's/,/\n/4'

要替换每次第4次使用:

echo "abcd,def,geff,hij,klmn,nop,qrs,tuv,wxyz,...." | sed 's/\(\([^,]*,\)\{3\}[^,]*\),/\1\n/g'

答案 2 :(得分:0)

它有效,因为xargs的默认操作是/bin/echo
http://unixhelp.ed.ac.uk/CGI/man-cgi?xargs

echo 'abcd,def,geff,hij,klmn,nop,qrs,tuv,wxyz,....' | xargs -d, -n4 | tr ' ' ','