在bash中替换字符串中的字符

时间:2014-10-21 02:08:34

标签: bash awk sed

如何在下面的字符串中替换两个字符,第5位和第6位?

 2xxx99xx

我想通过获取文件的记录数来替换第5位和第6位(即99)。

 $cat file | wc -l
 3

输出必须是:

 2xxx03xx

2 个答案:

答案 0 :(得分:3)

foo=2xxx99xx
printf "%s%02d%s" ${foo:0:4} $(wc -l < file) ${foo:6}

答案 1 :(得分:0)

使用sed:

echo "2xxx99xx" | sed -r "s/(.{4})..(.*)/\1$(printf "%02d" `wc -l < ff`)\2/g"

前4个字符组成组1,其余字符串除了第5和第6个字符组成组2.然后我们放回第1组,格式化数据,然后第2组。

如果sed版本不支持扩展正则表达式,请使用以下命令:

echo "2xxx99xx" | sed "s/\(.\{4\}\)..\(.*\)/\1$(printf "%02d" `wc -l < ff`)\2/g"