gpt4 book ai didi

regex - 在 sed 中的匹配模式之后附加一行不起作用

转载 作者:太空狗 更新时间:2023-10-29 12:02:13 24 4
gpt4 key购买 nike

我的 /etc/pam.d/system-auth-ac 设置了以下 auth 参数:

auth        required      pam_env.so
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 500 quiet
auth required pam_deny.so

我想在 pam_env.so 之后插入 pam_tally2.so。所以我希望它是:

auth        required      pam_env.so
auth required pam_tally2.so onerr=fail audit silent deny=5 unlock_time=900
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 500 quiet
auth required pam_deny.so

我使用的脚本是:

#! /bin/bash

grep "pam_tally2" /etc/pam.d/system-auth-ac &> /dev/null
if [ $? -ne 0 ];
then
sed -i '/^[]*account[]*required[]*pam_unix.so/aauth\trequired\tpam_tally2.so onerr=fail audit silent deny=5 unlock_time=900' /etc/pam.d/system-auth-ac
else
sed -i 's/.*pam_tally2.*/auth\trequired\tpam_tally2.so onerr=fail audit silent deny=5 unlock_time=900/1' /etc/pam.d/system-auth-ac
fi

但它给出了这个错误:

sed: -e expression #1, char 116: unterminated address regex

我做错了什么?

最佳答案

您可以在 gnu-sed 中使用 a 命令:

sed -i.bak '/pam_env\.so$/a\
auth required pam_tally2.so onerr=fail audit silent deny=5 unlock_time=900
' /etc/pam.d/system-auth-ac

编辑: 查看您发布的答案似乎这个 awk 命令比 grep 和 2 sed 更适合您 if/else 条件下的命令:

val='auth\trequired\tpam_tally2.so onerr=fail audit silent deny=5 unlock_time=900'
awk -v val="$val" '/^auth[[:blank:]]+required[[:blank:]]+pam_env\.so/ {
print $0 RS val; next} /pam_tally2\.so/{next} 1' /etc/pam.d/system-auth-ac

auth required pam_env.so
uth required pam_tally2.so onerr=fail audit silent deny=5 unlock_time=900
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 500 quiet
auth required pam_deny.so

关于regex - 在 sed 中的匹配模式之后附加一行不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31095840/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com