2017-06-10 15 views
0

1つの例外を除いて、私が大量の解決策を探しています。文書内の2つの他の文字列の間の文字列を見つける

.htmlドキュメントを検索して文字列を取得する必要があります。

次のようになります。文字列を含む行(1行、ない改行しない)私が取得する必要があるテキストは

INV_CHEST_LEATHER_09

私が使用

<script type="text/javascript">g_initHeader(0);LiveSearch.attach(ge('oh2345v5ks'));var _ = g_items;_[60]={icon:'INV_Chest_Leather_09',name_enus:'Layered Tunic'};_[6076]={icon:'INV_Pants_11',name_enus:'Tapered Pants'};_[3070]={icon:'INV_Misc_Cape_01',name_enus:'Ensign Cloak'};</script> 

ですawk、grep、sedとの間でデータを抽出します: 'and'、name_

問題は、これらのスクリプトのすべての3つのライン全体をスキャンして発生最後に使用されている」、名_従って私は

INV_Chest_Leather_09' で終わる、name_enus: 『層状 チュニック』}; = _ [6076] {アイコン: 'INV_Pants_11'、name_enus: '円すい パンツ'}; _ [3070] = {アイコン: 'INV_Misc_Cape_01

ここでIは

のgrep -Po -m 1を試みた最後です"(? < =] = {アイコン: '?)*(='、名_)」

私はawkのを試してみましたが、あまりにもsedは、と私は本当に使用する1つの好みを持っていませんしました

だから基本的に、私は、全体のhtmlファイルを検索し、アイコンの最初の発生を発見する必要があります: '、アイコンの後に最初に出現するまで右のそれの後にテキストを抽出:「の、名_

答えて

0

*。。あなたの正規表現ではgreedy matcherですので、パターンは文字列の最後まで一致し、name_部分と一致するようにバックトラックします。*を[^、] *のように置き換えることができます(つまり、一致するものは元CEPTカンマ):

grep -Po -m 1 "(?<=]={icon:')[^,]*(?=',name_)" 
+0

返事をありがとう。 これは機能しますが、grepには-m 1を省略しているようです。 私は今3つの結果を得ています。私は|私はそれにヘッド-1しかし、私はこれを処理する1つのコマンドを持つことを好むだろう – knuxyl

+0

それは複数のファイルから一致することを示唆している。完全なコマンドとは何ですか?grepコマンドへの入力をどのように指定していますか? –

+0

私はcatを使用していますindex.html | grep。私は1つの入力ファイルしか使用していません。私は、これらのアウトプットの3つすべてが必要なものと同じライン上にあるからだと思います。 – knuxyl

0

かかわらず、何の、私は、生成された空行を削除するsedを使用する必要がありますするつもりだったので、ここで私は結果を取得したい正確に何を行います私の最終的なコードです。

3 argが一致するためGNU AWKで
cat "index.html" | grep -Po -m1 "(?<=BEGIN)[^,]*(?<=END)" | sed '/^$/d' | head -1 
1

():

$ awk 'match($0,/icon:\047([^\047]+)/,a){print a[1]}' file 
INV_Chest_Leather_09 
+0

いいえ..一致($ 0、/ icon:\ 047([^ \ 047] +)\ 047、name _ /、a) '必要な文字列の両辺を含める必要がある場合に行います。 a [1]を印刷する。ファイル全体の最初の一致のみが必要な場合は 'exit}' – Sundeep

0

単純パールアプローチ:

perl -ne 'print "$1\n" if /\bicon:\047([^\047]+)/' file 

出力:

INV_Chest_Leather_09 
関連する問題