如何将确切的模式与 sed -n 匹配

  • 本文关键字:sed 匹配 模式 sed
  • 更新时间 :
  • 英文 :


我有一个文件测试.txt

---
kind: ClusterRole
metadata:
kind: ClusterRoleBinding
metadata:
subjects:
roleRef:
kind: ClusterRole
name: bla

并且需要带有sed的输出(仅与确切模式匹配的行(

kind: ClusterRole
metadata:

sed -n '/kind: ClusterRole/,/metadata/p' test.txt

kind: ClusterRole
metadata:
kind: ClusterRoleBinding
metadata:
kind: ClusterRole
name: bla

显示 ClusterRole、ClusterRoleBinding 和其他缩进的 ClusterRole

sed -n '/kind: ClusterRoleb/,/metadata/p' test.txt
sed -n '/<kind: ClusterRole>/,/metadata/p' test.txt

以上两个输出都一无所获,我做错了什么? 只是为了清楚,我没有收到任何 grep -B 2 建议;-(这是一个示例文件,原始文件要大得多,并且有数百个 ClusterRoles,所以我需要弄清楚如何匹配确切的模式。

谢谢!

勒马

你应该在你的模式中包括行首(^(和行尾($(。

如果您只需要搜索确切的多行,那么您可以使用pcregrep来实现它

pcregrep -M 'kind: ClusterRole(n)metadata:' test.txt

其中 -M, --multiline 允许模式匹配多行。

更多细节可以在这篇SO帖子中找到。

编辑:

您也可以使用grep

grep -Pazo 'kind: ClusterRolenmetadata:' test.txt

参考:这个SO帖子

这可能对你有用(GNU sed(:

sed -n 'N;/^kind: ClusterRolenmetadata:$/p;D' file

附加下一行并打印这些行(如果匹配(。删除第一行并重复。

如果您只需要第一个匹配项,请使用:

sed -n 'N;/^kind: ClusterRolenmetadata:$/{p;q};D' file

最新更新