bash - 编写一个 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
解决方案
你只是想让每行的第二列成为字符串“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
推荐阅读
- sql - SQL After trigger update 触发更新的值
- c# - C# Azure AD Graph 获取超过 20 个组的所有成员
- javascript - 使用 key props 强制重新渲染
- react-native - 如何在视图中设置状态并显示画廊中的多个选定图像
- angular - MatSnackBar 中的样式从组件打开
- sql-server - 如何动态添加列?
- javascript - 使用 try-catch 代替 then-response
- animation - Animation.commit 在 Xamarin Forms 中动画结束之前返回回调
- python - Pythonnet 错误:XamlParseException:“无法从文本中创建“点击”
- security - SNMPv2c 与 SNMPv3 自定义 MIB