![编写 shell 脚本来替换文件中的电话号码](https://linux22.com/image/1614519/%E7%BC%96%E5%86%99%20shell%20%E8%84%9A%E6%9C%AC%E6%9D%A5%E6%9B%BF%E6%8D%A2%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E7%94%B5%E8%AF%9D%E5%8F%B7%E7%A0%81.png)
我有一个名为 test.txt 的文件,该文件的内容是:
cat test.txt
abc,123456,india
dfg,78910,china
abc,893948,japan
abc,892389,australia
我尝试使用下面的 shell 脚本,但无法替换它:
#!/bin/bash
for line in $(cat /tmp/file.txt)
do
i=$(echo $line|grep XYZ |awk -F, '{print $2}')
while ( $i )
do
sed -i 's/$i/00070/g';
done
done
所以我想要一个 shell 脚本来将所有 abc 的电话号码替换为 00070 或任何唯一的数字。
答案1
你不需要外壳脚本. 只需调用一次 sed 即可:
sed -i -r 's/abc,[0-9]+,/abc,00000,/' <yourfile>
Sed 将迭代文件并在每一行上执行替换指令(当然,第一个成员会匹配某些内容)。假设电话号码只是一串数字(没有点、加号等...)。
使用脚本,您也不需要 grep/sed,只需用逗号分隔行,并使用提取的部分生成新行:
IFS=','; while read name phone country; do [[ $name == 'abc' ]] && phone="0000"; echo "$name,$phone,$country" ; done < Test.txt >Filtered.txt
编辑:遗漏了有关“abc”行的部分。已修复
答案2
如果你需要替换整个文件的内容,也许比逐行循环更好的解决方案是使用命令 sed。试试这个sed -i 's|abc,.*,|abc,0700,|g' test.txt