如何使用Regex删除除匹配大小写以外的所有其他字符


arn:aws:iam::aws:policy/AmazonEC2FullAccess
arn:aws:iam::aws:policy/IAMFullAccess
arn:aws:iam::s:policy/CloudWatchAgentServerPolicy
arn:aws:iam::aws:policy/AdministratorAccess
arn:aws:iam::aws:policy/aws-service-role/AWSSupportServiceRolePolicy
arn:aws:iam::aws:policy/aws-service-role/AWSTrustedAdvisorServiceRolePolicy
arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
arn:aws:iam::aws:policy/aws-service-role/AmazonElasticFileSystemServiceRolePolicy
arn:aws:iam::aws:policy/IAMAccessAnalyzerFullAccess
arn:aws:iam::aws:policy/aws-service-role/AWSBackupServiceLinkedRolePolicyForBackup

这里我只需要最后的策略名称。

我只需要/之后的字母

这是使用(?<=/).*的正则表达式

这个正则表达式的输出就是这个

  1. arn:aws:iam::aws:policy/AdministratorAccess

  2. arn:aws:iam::aws:policy/aws-service-role/AWSSupportServiceRolePolicy

正如你在1(中看到的那样,它是正确的,但在2(中,我需要最后一次出现/之后的字母

我需要删除除匹配情况以外的所有内容。

请某人放弃你的建议来实现这一点。

注意:我知道我可以使用boto3获得aws策略名称,但我对上面的用例很好奇。

您可以将grep与regexp一起使用,并将结果写入另一个文件中。删除原件,如果你愿意的话。类似的东西

grep -Eao '(?<=/).*' 'logs.log' >result.log

您可以使用lookbacking断言,然后匹配除/或换行符之外的任何字符,直到字符串[^/rn]+$的末尾

(?<=/)[^/rn]+$

查看regex演示

如果你使用PCRE,你也可以使用K来忘记到目前为止匹配的内容。

.*/K[^/rn]+$

请参阅另一个regex演示。

相关内容

最新更新