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