编写 shell 脚本来替换文件中的电话号码

编写 shell 脚本来替换文件中的电话号码

我有一个名为 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

相关内容