2014-01-08 33 views
0

我有2500 .txt文件,其中只有當以下開始和結束標記之間發生他們,我想通過replace所有+do+出現-do-代替從終端:我可以搜索/多個.txt文件的具體情況

<X> </X>, <O> </O>, <&> </&>, <del> </del>, <+> </+>, <*> </*>

我已經找到了如何查找/與此代碼的sed替換:

sed -i '' 's/-do-/+do+/g' *.txt 

但我wonderi如果有任何方法可以爲此添加這樣的條件。

非常感謝!

回答

0

你需要兩樣東西:

1)提高您的搜索模式來尋找標籤,就像這樣:/<[X0&]>-do-<\/[X0&]>/

2)附上標籤組,像這樣的反向引用複製他們的目標:s/\(foo\)bar/\1baz/g(這會給你foobar -> foobaz)。

這會讓你開始:sed -i 's/\(<[X]>\)-do-\(<\/[X]>\)/\1+do+\2/g' *.txt

+0

感謝您的回答。我可能是錯的(我不完全確定如何讀取代碼,並且在運行時我收到以下錯誤消息: 'sed:1:「S1A-001.txt」:無效的命令代碼S'),但我認爲我有點。實際上在標籤「」和「」之間有一大堆文本,在本文中,我想用+ do +替換所有出現的-do-。任何方式可以調整?非常感謝。 –

+0

對此的快速修補將是'sed -i's/\(<[X]>。* \) - do - \(。* <\/[X]> \)/ \ 1 + do + \ 2/g'* .txt'。你應該熟悉一下正則表達式,這就是所有這些巨型超級巨人所稱的:-) –

+0

會做:-)我仍然有一些問題,但是:這應該取代幾千個事件,但只取代2,並且只能取代2真的很短的比賽。我認爲這可能是因爲換行符不匹配...所以我嘗試了這一點(和其他一些可能性):'sed -i''s/\(<[X]> [\ n |。] * \) - do - \([\ n |。] * <\/[X]> \)/ \ 1 + do + \ 2/g'* .txt'但它仍然不起作用:( –

相關問題