姓名和身份证以下面格式存放id.txt文件里,目的是把姓名的第二个字和身份证的生日信息用X代替
张三 123456202202061234
李四五 234567202202061234
诸葛六七 234567202202061234
脚本1,用for循环

#!/bin/bash
id=`cat ./id.txt`
for i in $id;
do
if [ ${#i} -eq 18 ];then       #获取变量长度,身份证长度为18 
date=`echo ${i:6:8}`           #获取生日信息,6是启始位置,8为截取字符长度
echo ${i//$date/XXXXXXXX}    #把生日信息替换成并导出到文档
fi
if [ ${#i} -le 4 ];then      #获取姓名长度,是长为4个字
date=`echo ${i:1:1}`
echo ${i//$date/X} 
fi
done

输出结果
张X
123456XXXXXXXX1234
李X五
234567XXXXXXXX1234
诸X六七
234567XXXXXXXX1234

脚本2,while read,笨方法

#!/bin/bash
cat ./id.txt|while read a b     #a和b分别代表姓名列和身份证列
do
name1=`echo ${a:1:1}`
name=`echo ${a//$name1/X}`
id1=`echo ${b:6:8}`
id=`echo ${b//$id1/XXXXXXXX}`
echo $name $id 
done

脚本3,xargs -n方法

#!/bin/bash
cat ./id.txt|while read a b
do
name=`echo ${a:1:1}`
id=`echo ${b:6:8}`
{ echo ${a//$name/X}; echo ${b//$id/XXXXXXXX}; }|xargs -n 2        #xargs -n 2可让输出结果为2列的格式
done

脚本2和脚本3输出结果都一样,为
张X 123456XXXXXXXX1234
李X五 234567XXXXXXXX1234
诸X六七 234567XXXXXXXX1234