0

我有一个包含以下类型的字符串对的文件:

Call Stack: [UniqueObject1] | [UnOb2] | [SuspectedObject1] | [SuspectedObject2] | [SuspectedObject3] |  [UnOb3] | [UnOb4] | [UnOb5] | ... end till unique objects

Call Stack: [UniqueObject1] | [UnOb2] | 0x28798765 | 0x18793765 | 0x48792767 |  [UnOb3] | [UnOb4] | [UnOb5] | ... end till unique objects

文件中出现了许多这样的对。该对的属性是该对的第一部分具有“SuspectedObject1”、“SuspectedObject2”等,在该对的第二部分中被这些对象的地址的 HEX-VALUES 替换。

我想要做的是,删除对的所有第二部分。

请注意,这些对不会以任何特定顺序出现,并且可能由多条线隔开。

我计划遍历这个文件的每一行,如果我看到一个十六进制字符串作为地址而不是可疑对象,我想开始比较以下正则表达式

Call Stack: [UniqueObject1] | [UnOb2] | * | * | * |  [UnOb3] | [UnOb4] | [UnOb5] | ... end till unique objects

在整个文件中,如果一个字符串匹配,我想从文件中删除这个特定的行。

有人可以建议一种外壳方式来做到这一点吗?

4

1 回答 1

0

如果我正确理解了您的问题,您可能需要使用awk. 像这样运行:

awk -f script.awk file file

内容script.awk

BEGIN { 
    FS=" \\| "
}

FNR==NR {
    $3=$4=$5=""
    a[$0]++
    next
}

$3 ~ /^0x[0-9]{8}$/ {
    r=$0
    $3=$4=$5="" 
    if (a[$0]<2) { 
        print r
    }
    next
}1

或者,这是单线:

awk -F ' \\| ' 'FNR==NR { $3=$4=$5=""; a[$0]++; next } $3 ~ /^0x[0-9]{8}$/ { r=$0; $3=$4=$5=""; if (a[$0]<2) print r; next }1' file{,}
于 2012-12-27T13:52:30.810 回答