2017-01-25 11 views
0

Ich muss große Schwaden von HTML in einer 5 MB-Datei ersetzen, und alle OS X-Editoren, die ich versucht habe, hängen daran, dies zu versuchen. sed scheint die Antwort zu sein, aber das richtige Kommando zu schreiben, versagt mir. Ich war in diesen 3 Stunden und habe endlich um Hilfe gebeten!Suchen und ersetzen Platzhalterzeichenfolgen in großen Textdateien mit sed

Hier ist ein Beispiel - all diese

</div><div class="fsm fwn fcg">Joined<br>Added by **Tiffany Seibel-Howard** on <abbr title="**Thursday, June 20, 2013 at 12:39am**" data-utime="**1371703149**"><span class="timestampContent">**June 20, 2013**</span></abbr></div></div><div class="_4bl7 mrm"></div></div></div></div></div></div></div></td><td class="_51m- vTop hLeft pam _51mw"><div class="_4-u2 _4-u8" data-name="GroupProfileGridItem" data-testid="GroupMember_**100002558935125**"><div class="clearfix"><a class="_8o _8r lfloat _ohe" href="**https://www.facebook.com/brookesblossoms?fref=grp_mmbr_list**" tabindex="-1" aria-hidden="true" data-hovercard="/ajax/hovercard/user.php?**id=100002558935125&amp;extragetparams=%7B%22fref%22%3A%22grp_mmbr_list%22%2C%22directed_target_id%22%3A479810992099587%7D**" data-hovercard-prefer-more-content-show="1"><img class="_s0 _rv img" src="./(2) Neuroblastoma Support group . You are Not Alone Ask Away._files/**10374531_827398764022080_7090816591123160699_n.jpg**" alt=""></a><div class="_8u _42ef"><div class="_6a _5u5j"><div class="_6a _6b" style="height:100px"></div><div class="_6a _5u5j _6b"><div class="fsl fwb fcb">

Needs gelöscht werden, zu jeder Zeit zeigt sich in der Datei auf.

Alle Teile zwischen ** und ** sind Platzhalter, die sich in der Datei ändern.

Hilfe!

Antwort

0

Das Problem mit dem, was Sie versuchen zu tun, dass Sie Text enthält regexp Metazeichen (zB ?), die Sie als wörtliche behandeln müssen, aber Sie haben auch wörtliche Text, den Sie regexp Metazeichen konvertieren müssen (zB >**June 20, 2013**< - >>[^<]+<). Um das zu tun, Sie gehen zu wollen, indem man zuerst herauszufinden, beginnen, wie die Teile des Textes zum Ausdruck bringen, die veränderbar sind als eindeutig beschreibende Strings, zB:

</div><div class="fsm fwn fcg">Joined<br>Added by _NOT_LESS_THAN_ on <abbr title="_NOT_DOUBLE_QUOTE_" data-utime="_NOT_DOUBLE_QUOTE_"><span class="timestampContent">_NOT_LESS_THAN_</span></abbr></div></div><div class="_4bl7 mrm"></div></div></div></div></div></div></div></td><td class="_51m- vTop hLeft pam _51mw"><div class="_4-u2 _4-u8" data-name="GroupProfileGridItem" data-testid="GroupMember__NOT_DOUBLE_QUOTE_"><div class="clearfix"><a class="_8o _8r lfloat _ohe" href="_NOT_DOUBLE_QUOTE_" tabindex="-1" aria-hidden="true" data-hovercard="/ajax/hovercard/user.php?_NOT_DOUBLE_QUOTE_" data-hovercard-prefer-more-content-show="1"><img class="_s0 _rv img" src="./(2) Neuroblastoma Support group . You are Not Alone Ask Away._files/_NOT_DOUBLE_QUOTE_" alt=""></a><div class="_8u _42ef"><div class="_6a _5u5j"><div class="_6a _6b" style="height:100px"></div><div class="_6a _5u5j _6b"><div class="fsl fwb fcb"> 

dann saniert alle regexp Metazeichen im Text (siehe Is it possible to escape regex metacharacters reliably with sed) konvertieren dann die Platzhalter-Strings Sie regexps oben verwendet:

_NOT_LESS_THAN_ -> [^<]+ 
_NOT_DOUBLE_QUOTE_ -> [^"]+ 

und dann können Sie sed -E führen Sie den Text zu löschen.

Sie könnten mit GNU awk obwohl besser sein, so können Sie RS auf den obigen Text setzen und auf diese Weise müssen Sie nicht die gesamte Datei in den Speicher auf einmal zu lesen.

Verwandte Themen