我试图简化我在这里的生活,但我陷入困境。我有一个包含多行的文件。每条线路都有一个用户和一个号码。我想知道一个 bash 语句来搜索用户并更改号码。这怎么可能做到呢?提前致谢。
我的文件结构如下:
crmopr 162756
tpiopr 102334
ddnope 210928
- 解决了 -
这一句就可以完成工作。
sed -i '/MATCHING_STRING/s/MATCHING_NUMBER/NEW_NUMBER/1' file
MATCHING_STRING:用于查找我想要更改数字的行的字符串
MATCHING_NUMBER:要替换的数字
NEW_NUMBER:新号码
/1:仅更改行中的第一个替换匹配(在这种情况下也可以是 /g)
-i:使更改永久化
- 编辑 -
在我编辑OP几秒钟后接受的解决方案也有效!
答案1
如果您的文件如下所示:
abcd 1234
djhd 6534
fytf 4544
您可以像这样执行 AWK 单行代码
index=2;for i in `cat filename`; do echo $i; done|awk -v OFS=" " -v \
INDEX=$index '$1 ~ /^abcd$/ {$2="1233"; print }' >> NewFile.txt
这将匹配名称dddd
并将 替换1234
为1233
。这会将输出结果重定向到名为NewFile.txt
.
因此您的 NewFile 将包含替换的条目。可以对其进行编程以迭代所有文件条目。
答案2
简单的 awk (但在这种情况下 sed 更好)
awk '$1 ~ /^MatchingString$/ {$2 = NEW_NUMBER}1' YourFile > NewFile
- 限制为精确模式匹配(避免子模式错误选择)
更通用(使用 bash 变量内容)
awk -v "User=${UserWanted}" -v "Data=${WantedNumber}" '$1 == User { $2 = Data} 1' YourFile > NewFile