如果缺少字符串,则使用 sed 添加字符串或将字符串替换为错误的值



如何在带有 sed 的 bash 中检查行是否包含 use_authtok.*sha512,然后设置或添加回合=5000 ?到目前为止,我只知道如果缺少如何使用

sed 's/sha512/sha512 rounds=5000/g' 

以非稳健的方式。

例:

use_authtok try_first_pass sha512 remember=5
use_authtok try_first_pass sha512 remember=5 rounds=7000

期望的输出:

use_authtok try_first_pass sha512 remember=5 rounds=5000     # was missing here
use_authtok try_first_pass sha512 remember=5 rounds=5000     # changed from 7000

您能否也尝试遵循awk

awk '
/use_authtok.*sha512/ && !sub(/rounds=[0-9]+/,"rounds=5000"){
$0=$0 " rounds=5000"
}
1
' Input_file

像这样使用 awk :

$ awk '(/use_authtok.*sha512/){$5="rounds=5000"}1' file

输出:

use_authtok try_first_pass sha512 remember=5 rounds=5000
use_authtok try_first_pass sha512 remember=5 rounds=5000

最新更新