首页 > 解决方案 > 编写一个 shell 脚本来替换文件中的电话号码

问题描述

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

标签: bash

解决方案


你只是想让每行的第二列成为字符串“00070”吗?与其使用 while 循环遍历文件,不如让sed迭代,因为它就是这样做的。例如sed 's/\([^,]*\),[^,]*,/\1,00070,/'。但是sed是错误的工具,你应该这样做:

awk '{$2="00070"}1' FS=, OFS=, /tmp/file.txt

编辑:在评论中给出特异性。要限制替换,只需执行以下操作:

awk '$1 ~ /abc/ {$2="00070"}1' FS=, OFS=, /tmp/file.txt

推荐阅读