2009-12-13 7 views
6

本当に基本的な質問はこちら。だから私はその点に言われた。改行を除く任意の文字と一致します。私は改行を含む、任意の文字に一致するものを探しています。Grepには本当に普遍的なワイルドカードがありますか?

私がしたいのは、ウェブサイトページ内のすべてのテキストを2つの特定の文字列の間でキャプチャし、ヘッダーとフッターを取り除くことです。 HEADER TEXT(。+)FOOTER TEXTのようなもので、かっこ内にあるものを抽出しますが、ヘッダーとフッターの間にすべてのテキストと改行を含める方法を見つけることができません。前もって感謝します!

答えて

7

、私がやる:私は貪欲でないパターンここ

+2

ありがとうございました!どのようなフレンドリーで便利なサイト。私はBBEditでgrep検索を使用していたことを忘れていました。これは素晴らしいことです。あなたはすべてロック! –

3

あなたはPerlでそれを行うことができます:

$ perl -ne 'print if /HEADER TEXT/ .. /FOOTER TEXT/' file.html 

を区切り文字間のテキストのみを印刷するには、

$ perl -000 -lne 'print $1 while /HEADER TEXT(.+?)FOOTER TEXT/sg' file.html 

を使用/sスイッチは、正規表現マッチャーを作るには、として文字列全体を扱いますsシングルライン。ドットは改行と一致し、/gはできるだけ多くの回数一致することを意味します。

上記の例では、ローカルディスク上のHTMLファイルをクランキングすると仮定しています。あなたは、最初にそれらを取得LWP::Simpleからgetを使用する必要がある場合:

$ perl -MLWP::Simple -le '$_ = get "http://stackoverflow.com"; 
          print $1 while m!<head>(.+?)</head>!sg' 

上記のように、正規表現でHTMLを解析することは一般的なケースでは動作しませんのでご注意ください!すばやく汚れたスキャナで作業しているが、堅牢性が必要なアプリケーションの場合は、実際のパーサーを使用してください。

1

他のところで指摘されているように、grepは単一行のものに対応します。複数の電源ライン用

(正規表現:: MULTILINEとルビー、またはpythonで、AWK、sedは、何でも)、 "\ s" はまた、そう

HEADER TEXT(.*\s*)FOOTER TEXT 

はうまくいくかもしれない、改行をキャプチャする必要があります。.. 。

+0

ファイルを複数の行をスキャンして動作させるモードでファイルを読み込む必要があります。 –

+0

ありがとう、私はあなたがRubyでそれをやる方法を追加しました。 IIRC、それはperlishの/ gだよね? – phtrivier

2

grepのmanページは言う:

のgrep、egrepの、fgrepが、rgrep - パターンに一致する印刷行

grepは、1行以上一致させるために作成されていません。この作業はperlまたはawkで解決してください。

3

定義により、grepは一致する行を探します。行を読み込み、一致するかどうかを調べ、行を出力します。あなたがやりたい

可能な方法の1つは、sedである:

sed -n '/HEADER TEXT/,/FOOTER TEXT/p' "[email protected]" 

これは、「フッターのテキストを」一致する最初の行に「ヘッダーテキスト」、その後、繰り返し処理に一致する最初の行から出力します。 '-n'はデフォルトの '各行の印刷'操作を停止します。ヘッダーとフッターのテキストが同じ行に表示されている場合、これはうまくいきません。

好きなことをするには、おそらくperlを使用します(ただし、好きなようにPythonを使用できます)。私は、ファイル全体をスラッシングすることを検討し、ファイルの一致部分を見つけるために適切な修飾正規表現を使用します。しかし、 '@gbacon'によって与えられたPerlの1つのライナーは、上記の 'sed'スクリプトのPerlへのほぼ正確な音訳であり、スラッピングよりもほんの少しです。私は改行を含むいくつかの文字を一致させる必要がある場合

0

を使用してい

[\s\S]*? 

注場合は、gawkのでそれを行うために、1つの方法ですあなたはそれ

awk -vRS="FOOTER" '/HEADER/{gsub(/.*HEADER/,"");print}' file 
2

これは「BBEditの」でタグ付けされ、BBEditのは、あなたがドットがスイッチと改行にマッチできるようにすることができますPerlスタイルのパターン修飾子をサポートしている(?s)は

持って

(?s)。

はすべての文字と一致します。はい、 (?s)。+ は本文全体と一致します。

関連する問題