2017-01-04 7 views
0

無意識のうちに申し訳ありません、私はちょうど始まりましたし、他のどこにでも良い答えを見つけることができませんでした。基本的には、私はHTMLファイルをプレーンテキストとして保存しており、その中から行内の文字列を引っ張りたいのです。行は次のようになります。HTMLファイルから文字列を抽出する

<li><strong>Password: XXXXXX</strong></li>

まず第一に、それは私が引っ張ったいその行の2番目のインスタンスです。そして私が欲しいのはXXXXXXだけです。私はXXXXXX以外のファイル内のすべてのものを削除することをお勧めします。文字列が頻繁に変更されるので、私はそれをgrepできません。助けてくれてありがとう。

答えて

0

このような何かが動作するはずです:

cat c.txt |grep "Password:"|awk '{print $2}'|awk -F "<" '{print $1}'|sed -n 2p 
+0

私が探していたものとまったく同じです、ありがとうございました! – sullivnc

+1

@sullivnc答えを受け入れる前に少なくとも2時間待つのが最善です。なぜなら最初に得られる答えが最良ではないからですが、答えが受け入れられればあなたの質問は他の点よりも注意を払うことが少なくなります。この場合、あなたが受け入れた答えには、UUOCと、1が実行するときに4つの別々のコマンドのパイプがあります。これは非常に良い解決策ではないので、さまざまな値のパスワードを指定すると失敗します。これよりも優れています。 –

0

@sullivncは、次のことを試してみて、これがあなたを助けている場合、私に知らせてくださいでした。

echo your_Input_line_here | awk '{gsub(/.*Password: |<\/.*/,X,$0);print}' 

これは、はるかに短く、アガトンが提案したものよりも速くなります。

+1

単純にヌル文字列( '' '')の代わりに初期化されていない変数( 'X')を使用することで、コードの難読化をやめて脆弱にすることをやめてください。デフォルトの '$ 0'は必要ありません。 OPは、パスワードの2回目の出現を必ずしも必要とせず、すべての行を印刷するよう求めていません。 –

+1

OPがすべての行を印刷したい場合は、パスワードが出力される行だけでなく、すべての行から '

+1

@ EdMorton - ここで貴重なコメントをいただき、ありがとうございます。私はそれを将来に置こうとはしません、あなたの貴重な指導に感謝します。 – RavinderSingh13

2
$ cat file 
<li><strong>Password: AAAAAA</strong></li> 
<li><strong>Password: XXXXXX</strong></li> 
<li><strong>Password: ZZZZZZ</strong></li> 

$ awk 'sub(/.*<li><strong>Password: /,"") && sub(/<\/strong><\/li>.*/,"") && ++c==2' file 
XXXXXX 
+0

これは機能しませんでした。ファイルに何かを書き込むのではなく、テキストをカールからパイプしただけです。私はこれが問題を引き起こすとは思わないので、なぜうまくいかなかったのか分からない。 – sullivnc

+0

どうしたらうまくいかなかったのですか?出力がない、出力が間違っている、エラーメッセージがありますか?カールしてパイプを張っても、ファイルを読むと違いはありません。あなたの入力内容はあなたが投稿した形式とまったく同じですか?入力にregexpが少なくとも2回出現したことは確かですか? –

+0

出力がありませんでした。標準的な出力で見るのではなく、ファイルに転送しようとしましたが、それでも何もありません。私はそれをコピーして貼り付け、awkがどのように文字列を受け取ったかを変更しました。はい、間違いなく2回の正規表現があります。 – sullivnc

0

ラインNRを修正してください。

awk -F'[: <]' 'NR == 1 {print $5}' file 
XXXXXX 
関連する問題