I am currently working on a script that would delete blocks of lines with specific pattern from file1.txt and save the remaining on file2.txt . Below is the example of a 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
I would like to delete blocks with fssecPermissionId=FSNASVIEW
, fssecPermissionId=FSNASMANAGE
and fssecPermissionId=CMPlanManagementmonitor
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.
Below is the expected output that will be saved 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
Thank you so much in advance for any help.
You can use awk
with an empty 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
To save changes check: awk save modifications in place
EDIT: If you are dealing with a big list of exclusion patter then create a file called excl.txt
with all the strings you want to exclude like this:
cat excl.txt
FSNASVIEW
FSNASMANAGE
CMPlanManagementmonitor
Then use this awk command:
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
file:
dn: fssecPermissionId=FSNASVIEW,fsFragmentId=Permissions,fsFragmentId=Security,fsClusterId=ClusterRoot
fssecPermissionId: FSNASVIEW
objectClass: FSSecPermission
fssecAssignedGroupRoleRef: group_1
dn: fssecPermissionId=FSNASMANAGE,fsFragmentId=Permissions,fsFragmentId=Security,fsClusterId=ClusterRoot
fssecPermissionId: FSNASMANAGE
objectClass: FSSecPermission
fssecAssignedGroupRoleRef: group_2
dn: fssecPermissionId=permission1,fsFragmentId=Permissions,fsFragmentId=Security,fsClusterId=ClusterRoot
fssecPermissionId: permission1
objectClass: FSSecPermission
fssecAssignedGroupRoleRef: group_3
dn: fssecPermissionId=CMPlanManagementmonitor,fsFragmentId=Permissions,fsFragmentId=Security,fsClusterId=ClusterRoot
fssecPermissionId: CMPlanManagementmonitor
objectClass: FSSecPermission
fssecAssignedGroupRoleRef: group_4
dn: fssecPermissionId=permission2,fsFragmentId=Permissions,fsFragmentId=Security,fsClusterId=ClusterRoot
fssecPermissionId: permission2
objectClass: FSSecPermission
fssecAssignedGroupRoleRef: group_5
with sed
:
sed -r /"fssecPermissionId=(FSNASVIEW|FSNASMANAGE|CMPlanManagementmonitor)"/,+4d file
output:
dn: fssecPermissionId=permission1,fsFragmentId=Permissions,fsFragmentId=Security,fsClusterId=ClusterRoot
fssecPermissionId: permission1
objectClass: FSSecPermission
fssecAssignedGroupRoleRef: group_3
dn: fssecPermissionId=permission2,fsFragmentId=Permissions,fsFragmentId=Security,fsClusterId=ClusterRoot
fssecPermissionId: permission2
objectClass: FSSecPermission
fssecAssignedGroupRoleRef: group_5
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.