基于shell脚本中的某些字符串搜索删除文件的各个部分

时间:2014-09-09 15:04:54

标签: shell scripting

我有两个包含以下内容的文件

File1中
dn:cn = Abcd
对象类:
objectClass:top
cn:Abcd

档案2
dn:cn = Abcd
对象类:
objectClass:top
AdminDevType:
ConfigID:Abcd
EventID:Abcd
cn:Abcd
父:
模板:Something.cfgtpl

dn:cn =彼得
对象类:
对象类:
AdminDevType:
IOSConfigID:彼得
IOSEventID:彼得 cn:彼得 父:
模板:Something.cfgtpl

dn:cn = mohan
对象类:
对象类:
IOSconfigtemplate:
AdminDevType:
IOSConfigID:mohan
IOSEventID:mohan
cn:mohan
父母:

现在任务是我必须搜索file1 for pattern cn =或cn:outt out file1并将所有值存储在某个数组或其他内容中......就像这里我们只得到一个值即Abcd 完成此操作后,我必须搜索file2中file1中找到的所有字符串,如果找到它,则删除从dn开始的整个部分:cn = Abcd直到下一次出现模式dn: 类似地,我们需要搜索file1返回的所有值,如果文件2中存在匹配,则需要删除所需的部分。

请在shell脚本中建议如何执行此操作。在此先感谢

1 个答案:

答案 0 :(得分:1)

awk -F '[[:blank:]=]+' '
    # extract the CNs from file1
    NR == FNR {
        if (/^cn:/ || /^dn: cn=/) 
            cn[$NF] = 1
        next
    }

    # process file2, removing sections where CN was in file1
    /dn:/ {deleteThis = ($NF in cn)}
    !deleteThis;
    /^Template:/ {deleteThis = 0}
' file1 file2