使用awk替换字符

时间:2015-08-28 18:49:50

标签: replace awk sed

需要在前三个字符的第三列中替换x。

input.txt中:

1,abnil,1234567890  
2,asde,1472583691  
3,fghtr,3697412587  

output.txt的:

1,abnil,xxxxx67890  
2,asde,xxxxx83691  
3,fghtr,xxxxx12587

3 个答案:

答案 0 :(得分:1)

使用sub()函数的awk方式是:

awk -F, -v OFS=',' '1+sub(/^.{5}/,"xxxxx",$3)' file

你可以"覆盖"前5个字符:

awk -F, -v OFS=','  '$3="xxxxx" substr($3,6)' file

请注意,对于第二个cmd,如果第三列的长度小于5,则它也将由xxxxx设置。

两个单行都提供相同的输出。

答案 1 :(得分:0)

要求救援

替换任何字符(不仅仅是数字),你可以这样做

awk -F, -vOFS=, '{sub(/...../,"xxxxx",$3)}1'

如果您在该位置的字符少于5个,则不会进行替换。

答案 2 :(得分:0)

这可能适合你(GNU sed):

sed -r 's/[^,]{1,5}([^,]*)/xxxxx\1/3' file

或者如果您愿意:

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

这将替换xxxxx行上第三组非逗号的前五个非逗号(或更少)。