【问题标题】:grepping string from long text从长文本中提取字符串
【发布时间】:2012-11-27 06:07:31
【问题描述】:

OSX 中的以下命令检查帐户是否被禁用(或未被禁用)。

我想使用 grep 字符串“isDisabled=X”来创建禁用用户的报告,但由于输出为三行,我不确定如何执行此操作,而且我对前 12 个字符感兴趣第三行:

bash-3.2# pwpolicy -u jdoe -getpolicy
Getting policy for jdoe /LDAPv3/127.0.0.1

isDisabled=0 isAdminUser=1 newPasswordRequired=0 usingHistory=0 canModifyPasswordforSelf=1 usingExpirationDate=0 usingHardExpirationDate=0 requiresAlpha=0 requiresNumeric=0 expirationDateGMT=12/31/69 hardExpireDateGMT=12/31/69 maxMinutesUntilChangePassword=0 maxMinutesUntilDisabled=0 maxMinutesOfNonUse=0 maxFailedLoginAttempts=0 minChars=0 maxChars=0 passwordCannotBeName=0 validAfter=01/01/70 requiresMixedCase=0 requiresSymbol=0 notGuessablePattern=0 isSessionKeyAgent=0 isComputerAccount=0 adminClass=0 adminNoChangePasswords=0 adminNoSetPolicies=0 adminNoCreate=0 adminNoDelete=0 adminNoClearState=0 adminNoPromoteAdmins=0

非常感谢您的想法/建议!最终这将成为 Bash 脚本的一部分。谢谢。

【问题讨论】:

    标签: bash shell grep


    【解决方案1】:

    这就是你将如何使用grep 来匹配“isDisabled=X”:

    grep -o "isDisabled=."
    


    解释:
    • grep:调用 grep 命令
    • -o:为grep 使用--only-matching 选项(来自 grep 手册:“仅打印匹配行的匹配(非空)部分,每个这样的部分在单独的输出行上。”
    • "isDisabled=.":这是你给 grep 的搜索模式。 . 是正则表达式的一部分,表示“匹配除换行符以外的任何字符”。

    用法:

    这是您将其用作脚本的一部分的方式:

    pwpolicy -u jdoe -getpolicy | grep -oE "isDisabled=."
    

    这是您可以将结果保存到变量的方法:

    status=$(pwpolicy -u jdoe -getpolicy | grep -oE "isDisabled=.")
    

    如果您的命令在某个时间之前运行,并且命令的结果保存到名为“results.txt”的文件中,您可以将其用作grep 的输入,如下所示:

    grep -o "isDisabled=." results.txt
    

    【讨论】:

    • 谢谢!完美的。我真的很感激。
    【解决方案2】:

    你可以使用sed作为

    cat results.txt | sed -n 's/.*isDisabled=\(.\).*/\1/p'
    

    这将打印isDisbaled 的值。

    【讨论】:

    • 无用的猫斑!
    • 我知道这不是很正确的方法,但这就是我多次使用它的方式..只需将重定向添加到新文件...
    • 改用sed -n 's/.*isDisabled=\(.\).*/\1/p' results.txt
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-25
    • 1970-01-01
    相关资源
    最近更新 更多