从长文本中收集字符串

时间:2012-11-27 06:07:31

标签: bash shell grep

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

我想grey字符串“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脚本的一部分。感谢。

2 个答案:

答案 0 :(得分:3)

这是您使用grep匹配“isDisabled=X”的方式:

grep -o "isDisabled=."

<小时/> 的说明:

  • grep:调用grep命令
  • -o:对--only-matching使用grep选项(来自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

答案 1 :(得分:1)

您可以将sed用作

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

这将打印isDisbaled

的值