2017-06-15 5 views
0

現在、特定のパターンの行ブロックを削除するスクリプトを作成しています。file1.txt残りon file2.txt。以下は例です FILE1.TXT:私はfssecPermissionIdの70以上の値があること、私が だろうしていることfssecPermissionId=FSNASVIEWfssecPermissionId=FSNASMANAGEfssecPermissionId=CMPlanManagementmonitorパターン内のbashを使用してファイル内の行ブロックを削除し、残りのファイルを別のファイルに保存する方法

注意してブロックを削除したい

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 

削除したいのですが、簡単にするための例はほとんどありませんでした。私は 考えているそれらの70の値は何とか配列に格納されるだろう しかし、私はどのように考えている。以下は

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 

に保存されます予想される出力は、任意の助けを事前にどうもありがとうございます。

答えて

1

あなたは空のRSawkを使用することができます。

変更内容を保存するには

チェック:awk save modifications in place


EDIT:

をあなたは除外パタパタの大きなリストを扱っているなら、あなたはこのように除外したいすべての文字列と 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 
+0

これは 'fssecPermissionId'が3つの値しか持たない場合には動作しますが、私の実際のファイルでは削除する' fssecPermissionId'の値が70以上あります。このコードを使って70の値を制限する方法はありますか? –

+0

私はこれを試してみましょう。ありがとうございました! –

+0

回答がさらに編集されました。 – anubhava

0

ファイル:

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 

sedと:

sed -r /"fssecPermissionId=(FSNASVIEW|FSNASMANAGE|CMPlanManagementmonitor)"/,+4d file 

出力:

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 
+0

これは 'fssecPermissionId'の値が3つしかない場合に有効です。しかし、私の実際のファイルでは、削除するfssecPermissionIdの値が70以上あります。このコードを使って70の値を制限する方法はありますか? –

関連する問題