2011-10-19 63 views
0

我想加入開放標籤,並與 名爲「content_subhd」類,關閉標籤之間。例如線:AWK加入多行

<span class="content_subhd">1 

2 

3 </span> 

<span class="xyz">1 

2 

3</span> 

輸出應該是:

<span class="content_subhd">123</span> 

<span class="xyz">1 

2 

3 

</span> 

豈今實現,有什麼建議?

回答

1
awk '/<span class="content_subhd">/, /<\/span>/ { 
    r = r ? r $0 : $0 
    if (/<\/span>/) { 
    print r; r = x 
    } 
    next 
    }1' infile 

如果要替換現有文件的內容:

awk > _new_ '/<span class="content_subhd">/, /<\/span>/ { 
    r = r ? r $0 : $0 
    if (/<\/span>/) { 
    print r; r = x 
    } 
    next 
    }1' your_file && 
    mv -- _new_ your_file 

大規模更換增加(如在每個操作要求):

find <your arguments here> | 
    while IFS= read -r; do 
    awk > _new_ '/<span class="content_subhd">/, /<\/span>/ { 
    r = r ? r $0 : $0 
    if (/<\/span>/) { 
    print r; r = x 
    } 
    next 
    }1' "$REPLY" && 
    mv -- _new_ "$REPLY" 
    done 
+0

謝謝,它的工作原理。 但我怎麼能重定向輸出回到相同的文件? 我嘗試添加>到打印東西的行尾,但它似乎不工作。 – felix

+0

@felix,添加解決方案。 –

+0

非常感謝您的幫助! 我是awk的新手,不太熟悉它。 我將這個腳本與find命令結合起來進行批量替換。 我想我需要一段時間來找出取代的論點,但已經從你得到很大的幫助。再次感謝。乾杯! – felix

1

作爲戰略經濟對話標記在這個問題,這裏是一個班輪:

sed '/<span class="content_subhd">/,/<\/span>/{H;/<\/span>/{s/.*//;x;s/\n//g;p;};d}' source 

除特殊的「span class」情況外,所有行均通過。這些行被移走到存儲空間,換行符被刪除,然後打印多行代碼。