到位

2012-12-26 40 views
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 

整個文件,如果一個字符串不匹配,我想從文件中刪除這個特定的行。

有人可以提出一種shell方法來做到這一點?

+0

什麼對象的描述是什麼樣子?它們能包含十六進制地址嗎他們可以包含|字符?十六進制地址是否始終在第3,4和5列(用|分隔列)?非十六進制行是否可以在十六進制行之前和之後出現?可以有多個相同的十六進制行嗎?你想刪除十六進制行還是非十六進制行? – potrzebie

+0

1.對象描述只能由[a-zA-z_]組成,例如UITableView_userSelectRowAtPendingSelectionIndexPath:showTable 2.否,它們永遠不會有十六進制地址3.是非十六進制行可能發生在十六進制行之前或之後。 4.不會有隻有一個相同的十六進制行5.我想要刪除十六進制行,但只有當類似的非十六進制行可用時 – Neeraj

回答

0

如果我已正確理解您的問題,則可能需要使用awk。運行,如:中script.awk

awk -f script.awk file file 

內容:

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{,} 
+0

此外,您可能需要/想要調整正則表達式以匹配十六進制你感興趣的字符串,請讓我知道它是怎麼回事。乾杯。 – Steve