查找并替换文件中的精确匹配项 - 更改文件中某些内容的值 - Linux 终端

查找并替换文件中的精确匹配项 - 更改文件中某些内容的值 - Linux 终端

1)我有一个文件:/etc/testconfig/users.conf:

john1:*:$5$CJ5q52R0DPTbnvfddsa3IB/lofFuRoFnFc3OgKxkDP520PntI8pI76
john43:*:$5$cSV2tbDHA5645gdfN5w8W2TDMddyOPMBUR9nL7hQoVwF6QddElClKji/PB
54john:*:$5$7HKalMq5mwN8Q0.R$tr.1LntkXmMGP7ury7BozfGFPoRVbgRTBxgA86kBh65
john:*:$5$Y8EaseV3CsfdfgU$pCcQNC4o1m9H3NhiTXQ6sIDE5qOGNEsEuEGl8tXAq3B
john20:*:$5$YadICtwvyrVdfcvhGT8VVy5tyhg5bWtAlMfc/wwqs8K3ngvLM6
johndoe:*:$5$fq9F07dfgfgh56756yhgLBYCEQpdRmRBzl0RU.q1ZLj7DsT1.kiCCF9

我的目标是在我的文件中找到并替换完全匹配的内容。

我试过 :

  sed -i "s/john/david/" /etc/testconfig/users.conf

但文件中的所有 John 都被替换为 David :

david1:*:$5$CJ5q52R0DPTbnvfddsa3IB/lofFuRoFnFc3OgKxkDP520PntI8pI76
david43:*:$5$cSV2tbDHA5645gdfN5w8W2TDMddyOPMBUR9nL7hQoVwF6QddElClKji/PB
54david:*:$5$7HKalMq5mwN8Q0.R$tr.1LntkXmMGP7ury7BozfGFPoRVbgRTBxgA86kBh65
david:*:$5$Y8EaseV3CsfdfgU$pCcQNC4o1m9H3NhiTXQ6sIDE5qOGNEsEuEGl8tXAq3B
david20:*:$5$YadICtwvyrVdfcvhGT8VVy5tyhg5bWtAlMfc/wwqs8K3ngvLM6
daviddoe:*:$5$fq9F07dfgfgh56756yhgLBYCEQpdRmRBzl0RU.q1ZLj7DsT1.kiCCF9

2)我的第二个问题是如何改变某些东西的价值。

在此文件中:/etc/testconfig/test.conf:

我想改变测试示例的值:

#this is the test-example  with the test-example you can do something.
test-example = 25

#this is the test-example. with the test-example you can do something.
test-example = 45

无需替换整行(只需将 25 更改为 45)。测试示例值(25)可能会有所不同。所以我无法找到它并用常量值更改它。

答案1

使用词边界

sed -i "s/\bjohn\b/david/" /etc/testconfig/users.conf

使用捕获组:

sed -i "s/\(test-example = \)[0-9]\+/\1 45/" /etc/testconfig/users.conf

相关内容