Bash Unix shell脚本在文件中查找字符串,然后通过添加字符或数字进行追加
是否有人可以帮助我在文件中的字符串中添加零 例如:我有test.dat,它包含如下内容: 1名姓氏A+2015042113:00:00000 285000 FSCRD库存0 2姓氏姓氏B+2015042220:00:00000 331000SSESA INV 0Bash Unix shell脚本在文件中查找字符串,然后通过添加字符或数字进行追加,bash,shell,unix,solaris,Bash,Shell,Unix,Solaris,是否有人可以帮助我在文件中的字符串中添加零 例如:我有test.dat,它包含如下内容: 1名姓氏A+2015042113:00:00000 285000 FSCRD库存0 2姓氏姓氏B+2015042220:00:00000 331000SSESA INV 0 和我想创建一个shell脚本来编辑FIE中的一个字符串,在字符串中间插入三(3)个零。 因此,预期的输出将是:我加粗了三个零,如下所示 01名字姓氏A+2015042113:00:00000000285000 FSCRD库存0 02名字
和我想创建一个shell脚本来编辑FIE中的一个字符串,在字符串中间插入三(3)个零。 因此,预期的输出将是:我加粗了三个零,如下所示
01名字姓氏A+2015042113:00:00000000285000 FSCRD库存0 02名字姓氏B+2015042220:00:PM000000331000SSESA INV 0您可以使用awk -F : '{print $1":"$2":"substr($3,1,2)"000"substr($3,3)}' test.dat
或
您可以将
sed
与regex
一起使用:
sed 's/\(:..:..\)/\1000/' test.dat
它查找模式:…:…
(点是任意字符,因此它查找“冒号、任意字符、任意字符、冒号、任意字符、任意字符”)并向其添加3个零
sed "s/\(+[0-9]\{10\}:[0-9]\{2\}:[A-Z0-9]\{2\}\)\([A-Z0-9]\{16\}\)/\1000\2/"
此sed
命令用于匹配整个第五个字段,然后插入三个零。这将更加健壮(与较短的regex
)以防止替换行的其他部分
如果第五个字段有规范,则可以使
regex
更强大 您可以定义要添加零的位置吗?假设这是以制表符分隔的,并且第五个字段的开头包含一个固定长度的日期戳,awk-F'\t'{$5=substr($5,1,17)“000”substr($5,18)}1'文件
将满足您的要求。在第二个示例中,您添加了PM0
,而不是000
。请澄清。@Ohad Eytan——我用粗体突出了它。我看到了我正在寻找的示例definition@MDogru-如果FirstName有两个名称,如“johnadam”,并且文件不是以制表符分隔的,而是以空格分隔的,那么$5将是一个问题。有什么想法吗?谢谢你的回复。我想说,这种模式匹配确实很有挑战性。@Neo:我将FS改为:也许这可以帮助你;多格鲁先生-看来会有用的。我在打击非法行动。我需要在solaris 10中的某个bin calling-r上更新shell。多谢!!
sed "s/\(+[0-9]\{10\}:[0-9]\{2\}:[A-Z0-9]\{2\}\)\([A-Z0-9]\{16\}\)/\1000\2/"