gpt4 book ai didi

linux - 如何使用带有模式的 bash 删除文件中的行 block 并将剩余的行保存在另一个文件中

转载 作者:太空宇宙 更新时间:2023-11-04 10:19:19 25 4
gpt4 key购买 nike

我目前正在编写一个脚本,该脚本将从 file1.txt 中删除具有特定模式的行 block ,并将剩余的保存在 file2.txt 中。以下是 file1.txt 的示例:

dn: fssecPermissionId=FSNASVIEW,fsFragmentId=Permissions,fsFragmentId=Securi
ty,fsClusterId=ClusterRoot
fssecPermissionId: FSNASVIEW
objectClass: FSSecPermission
fssecAssignedGroupRoleRef: group_1

dn: fssecPermissionId=FSNASMANAGE,fsFragmentId=Permissions,fsFragmentId=Securi
ty,fsClusterId=ClusterRoot
fssecPermissionId: FSNASMANAGE
objectClass: FSSecPermission
fssecAssignedGroupRoleRef: group_2

dn: fssecPermissionId=permission1,fsFragmentId=Permissions,fsFragmentId=Securi
ty,fsClusterId=ClusterRoot
fssecPermissionId: permission1
objectClass: FSSecPermission
fssecAssignedGroupRoleRef: group_3

dn: fssecPermissionId=CMPlanManagementmonitor,fsFragmentId=Permissions,fsFragmentId=Securi
ty,fsClusterId=ClusterRoot
fssecPermissionId: CMPlanManagementmonitor
objectClass: FSSecPermission
fssecAssignedGroupRoleRef: group_4

dn: fssecPermissionId=permission2,fsFragmentId=Permissions,fsFragmentId=Securi
ty,fsClusterId=ClusterRoot
fssecPermissionId: permission2
objectClass: FSSecPermission
fssecAssignedGroupRoleRef: group_5

我想使用 fssecPermissionId=FSNASVIEWfssecPermissionId=FSNASMANAGEfssecPermissionId=CMPlanManagementmonitor 删除 block

Note that there are over 70 values of fssecPermissionId that i would like to delete, I just gave few examples for simplicity. I am thinking also that those 70 values would be stored somehow on an array but i have no idea how to.

以下是将保存到 file2.txt

的预期输出
dn: fssecPermissionId=permission1,fsFragmentId=Permissions,fsFragmentId=Securi
ty,fsClusterId=ClusterRoot
fssecPermissionId: permission1
objectClass: FSSecPermission
fssecAssignedGroupRoleRef: group_3

dn: fssecPermissionId=permission2,fsFragmentId=Permissions,fsFragmentId=Securi
ty,fsClusterId=ClusterRoot
fssecPermissionId: permission2
objectClass: FSSecPermission
fssecAssignedGroupRoleRef: group_5

非常感谢您的帮助。

最佳答案

您可以将 awk 与一个空的 RS 一起使用:

awk -v RS= -v ORS='\n\n' '!/fssecPermissionId=(FSNASVIEW|FSNASMANAGE|CMPlanManagementmonitor)/' file

dn: fssecPermissionId=permission1,fsFragmentId=Permissions,fsFragmentId=Securi
ty,fsClusterId=ClusterRoot
fssecPermissionId: permission1
objectClass: FSSecPermission
fssecAssignedGroupRoleRef: group_3

dn: fssecPermissionId=permission2,fsFragmentId=Permissions,fsFragmentId=Securi
ty,fsClusterId=ClusterRoot
fssecPermissionId: permission2
objectClass: FSSecPermission
fssecAssignedGroupRoleRef: group_5

要保存更改,请检查:awk save modifications in place


编辑:如果您要处理大量排除模式列表,请创建一个名为 excl.txt 的文件,其中包含您要排除的所有字符串,如下所示:

cat excl.txt
FSNASVIEW
FSNASMANAGE
CMPlanManagementmonitor

然后使用这个 awk 命令:

awk -F, -v ORS='\n\n' 'NR==FNR {
ex["dn: fssecPermissionId=" $1]
next
}
!($1 in ex)' excl.txt RS= file

dn: fssecPermissionId=permission1,fsFragmentId=Permissions,fsFragmentId=Securi
ty,fsClusterId=ClusterRoot
fssecPermissionId: permission1
objectClass: FSSecPermission
fssecAssignedGroupRoleRef: group_3

dn: fssecPermissionId=permission2,fsFragmentId=Permissions,fsFragmentId=Securi
ty,fsClusterId=ClusterRoot
fssecPermissionId: permission2
objectClass: FSSecPermission
fssecAssignedGroupRoleRef: group_5

关于linux - 如何使用带有模式的 bash 删除文件中的行 block 并将剩余的行保存在另一个文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44560252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com