1

そのため、Linuxのコマンドラインで、HTMLコードを検索し、コードの動的な部分だけを出力しようとしています。たとえば、このコード

<p><span class="RightSideLinks">Tel: 090 97543</span></p>

090ではなく97543を印刷したいだけです。次にファイルを検索すると、コードが次のように変更された可能性があります。

<p><span class="RightSideLinks">Tel: 081 82827</span></p>

そして、私は82827が欲しいだけです。残りのコードは、電話番号が変わるだけで同じままです。

これを行うためにgrepを使用できますか?ありがとう

編集:

このコードでも使用できますか?

<tr class="patFuncEntry"><td align="left" class="patFuncMark"><input type="checkbox" name="renew0" id="renew0" value="i1061700" /></td><td align="left" class="patFuncTitle"><label for="renew0"><a href="/record=p1234567~S0"> I just want to print this part. </a></label>

その上で変わるのは、レコード番号p1234567~S0"と、印刷したいテキストです。

4

1 に答える 1

1

使用する1つの方法GNU grep

grep -oP '(?<=Tel: .{3} )[^<]+' file.txt

内容例file.txt

<p><span class="RightSideLinks">Tel: 090 97543</span></p>
<p><span class="RightSideLinks">Tel: 081 82827</span></p>

結果:

97543
82827

編集:

(?<=Tel: .{3} ) ## This is a positive lookbehind assertion, which to be
                ## interpreted must be used with grep's Perl regexp flag, '-P'.

Tel: .{3}       ## So this is what we're actually checking for; the phrase 'Tel: '
                ## followed by any character exactly three times followed by a 
                ## space. Since we're searching only for numbers you could write
                ## 'Tel: [0-9]{3} ' instead.

[^<]+           ## Grep's '-o' flag enables us to return exactly what we want, 
                ## rather than the whole line. Therefore this expression will
                ## return any character except '<' any number of times.

Putting it all together, we're asking grep to return any character except '<' 
any number of times if we can find 'Tel: .{3} ' immediately ahead of it. HTH.
于 2012-10-05T22:47:38.833 に答える