プロが教える店舗&オフィスのセキュリティ対策術

初めての質問で初歩的なことですみません。
どうぞご教示ください。

1000行以上のテキストデータ(htmlのソース)に
100行ほどのhttpではじまるURLがあります。
このURL以外を消したいのです。

テキストエディターの正規表現の否定になると思ったのですが
で何度やってもうまくいきません。。。。

どうぞ宜しくお願いいたします。

--------------------------
<サンプル(テキストエディターにて)>
aaaaaaa
b121212
ccc
http...........................................  ←これだけを残したい
xxxxxxxxxxxxxxxx123123
y45646
z78979
http...........................................   ←これだけを残したい



--------------------------

A 回答 (6件)

EmEditorは、UNIX系のPOSIXより拡張されたPerl並みの正規表現がそのまま利用できますから、その手法で行くと、特殊な手法は必要なくごく普通に


検索する文字列
^(?!http:)[^\n]*\n
置換する文字列
        は記入しない
で置換できるはずです。
 POSIX系の正規表現が扱えるテキストエディタでしたら、
    • good
    • 1
この回答へのお礼

ありがとうございます。できました!!!!
なかなか手持ちのアプリケーションでできなくて、いろんなフリーソフトを
昨夜山のようにDLしましたが、さっぱりできず途方にくれていました。。。
これで今日の作業が朝から叶います!!!本当に感謝します!!

みなさんに感謝いたしますが、
私の手持ちのEmEditorでご回答いただきましたORUKA1951様をベストアンサーとさせていただきます。

本当にありがとうございました。

お礼日時:2013/05/17 09:32

>『vivi』と『Em-editor』


いや~、あいにく両方共まったく見たことも触ったこともないので何とも…。自分はもう10年来、テキスト系は『秀丸』オンリーの環境なので。

ただエディタが環境が変わっても正規表現は変わらないと思うので、前述の例文で通らなければ、何かそちらの環境のみの特殊な事情があるのかな?もしかしてUNIX系?だとしたら自分にはお手上げです。

あ、もしかしたら例文の正規表現の文末の「\n」を削れば通るかも?

P.S.
ここの解説によれば少なくとも『Em-editor』には正規表現で否定マッチが可能みたいなので、

http://jp.emeditor.com/help/howto/search/search_ …

…何か色々やれば出来るとは思うんですが。

P.P.S.
何人かの回答者が提示してる様に、perlとかphpみたいなテキストを直に弄れる系の環境が走ってるのなら。そっちを利用した方が、特に項目数やファイル数が多い場合は便利かと思います。エディタ系内蔵の正規表現だと、何かと制限が付いてる場合も多いので。

他には自分も『秀丸』でよく使うイカサマ手法ですが。1回の置換で全てをやろうと思わない事。2回~3回に分けて、段階的に置換処理を適用させて、最終的に自分の欲しい結果にする方法です。
    • good
    • 0
この回答へのお礼

再度のご回答本当にありがとうございます。
大変お手数おかけして、感謝するばかりです。

はい、頂いた例文をもとに
>例文の正規表現の文末の「\n」を削れば通るかも?
も試してみたのですが、同じメッセージがでてしまいました。

Webで調べつつ頂いた例文を解読改良しながら試してみたのですが
私の能力では無理でした。。情けない。。

今後に向けて正規表現ももっと勉強しなくてはいけませんね。
お話本当に勉強になりました。

心より感謝申し上げます。ありがとうございました。

お礼日時:2013/05/17 09:47

コマンドプロンプトで、



findstr /b http 入力ファイル >出力ファイル
    • good
    • 0
この回答へのお礼

ありがとうございます。
初心者レベルなので、理解できずにごめんなさい。

お礼日時:2013/05/17 09:33

SED(steam editor)の仕事だと思いますが、perlだと配列に読み込んで


open(IN,"in.txt");
open(OUT,"out.txt");
while(<IN>) {
if(m#^http://#){
print OUT $_;
}
}
close(IN);
close(OUT);

SEDだと、
sed -n -e '/^http:/p' /out.txt | more
で数万行あっても一瞬で終わる。
    • good
    • 0
この回答へのお礼

ありがとうございます!

Sed未経験でしてフリーのソフトをDLしたりしてみたのですが
windows8に合うものがなく、実現できませんでした。。

今度触れる機会がありましたら、やってみたいと思います。
勉強になりました。

丁寧なご回答ありがとうございました。

お礼日時:2013/05/17 09:35

正規表現で否定マッチさせるのなら、



 ^(?!http).+\n

~これで「行頭がhttpで始まる以外の文字列」にマッチすると思われ…。つまりこれでマッチした文字列を削除すれば、後にはhttp~だけが残る…はず?

この回答への補足

早速ありがとうございます。

早速試してみたのですが、うまくいきませんでした。。

「検索文字列が無効です」と出てしまいます。

きっと4017Bさんの環境ではうまくいくのですよね。すみません。。



お使いのテキストエディターを宜しければ教えていただけないでしょうか?

私はフリーのテキストエディタのviviとEm-editorを使っております。

ご面倒おかけいたします。

補足日時:2013/05/16 20:59
    • good
    • 0

「テキストエディター」にもよるからなぁ.



ちょっと手間をかけていいなら
「残したい行」だけからなるファイルを作る→元のファイルにコピーする
という方針もある.

この回答への補足

早速ありがとうござます。

テキストエディターはviviとEmeditorを使っています。


残したい行が(全部で1000行超え中)ランダムに100行ぐらいあるのですが

>>「残したい行」だけからなるファイルを作る→元のファイルにコピーするという方針

とはどのようなものになるのでしょうか?

補足日時:2013/05/16 18:32
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!