以下是我想从中提取信息的文字:
<ul class="disc">
<li><strong>euro195.com</strong></li>
<li><strong>euro213.com</strong></li>
<li><strong>uk180.com</strong> <span class="red">(optimized for web surfing; no p2p downloading)</span></li>
<li><strong>us1.com</strong> <span class="red">(optimized for web surfing; no p2p downloading)</span></li>
<li><strong>us2.com</strong> <span class="red">(optimized for web surfing; no p2p downloading)</span></li>
<li>Username: <strong>user1</strong></li>
<li>Password: <strong>pswd1</strong></li>
</ul>
<div><strong><span class="green"> More servers coming.</span></strong></div>
</div><!-- .columns -->
在此文本中,应使用以下两种方式获取用户名和密码:
1
用户名:USER1
PSWD:pswd1
2
用户1
pswd1
=====
1。 我只能拥有
<li>Username: <strong>user1</strong></li>
<li>Password: <strong>pswd1</strong></li>
以下
egrep 'Username|Password' file
或者
<li>Username: <strong>user1
<li>Password: <strong>pswd1
以下
grep -oP 'Username:.{0,16}|Password:.{0,16}' file
但这意味着信息长度始终相同而不是这种情况。
2。 这是我试过的,再次徒劳无功:
grep -oP "(?<=(Username: \<strong\>|Password: \<strong\>))[^>]*\<" text4
非常感谢你的帮助!
答案 0 :(得分:1)
使用html解析器而不是grep会更好。
$ grep -oP "(?<=(Username: <strong>|Password: <strong>))[^<]*" file
user1
pswd1
您需要在lookbehind中添加确切的空格,否则它将无法工作,并且不需要逃避<
或>
。
答案 1 :(得分:1)
不确定grep是否合适,但你可以使用
cat text4 | egrep '(Username:|Password:)' | sed 's/^.*<strong>\(.*\)<\/strong>.*$/\1/'