在文件匹配模式中查找行并进行替换

在文件匹配模式中查找行并进行替换

我试图简化我在这里的生活,但我陷入困境。我有一个包含多行的文件。每条线路都有一个用户和一个号码。我想知道一个 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并将 替换12341233。这会将输出结果重定向到名为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

相关内容