我有一个文件测试.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