如何grep特定的线条

时间:2015-07-20 08:59:45

标签: linux bash unix grep wget

我正在尝试从网址中获取一些ID。

在我的脚本中,我使用while循环和wget命令点击URL,然后将输出保存在文件中。

然后在同一循环中我grep XYZ User ID:并在此字符串后面有3行并将其保存到另一个文件中。

当我打开此输出文件时,我会找到以下行。

< p >XYZ User ID:< /p>

< /td >

< td>

< p>2989288174< /p>

因此,使用grep或其他任何内容我如何打印以下输出

XYZ User ID:2989288174

2 个答案:

答案 0 :(得分:3)

假设一个常量tag模式:

<p>XYZ User ID:</p>
</td>
<td>
<p>2989288174</p>

grep应该是最好的方式:

grep -oP '(?<=p>)([^>]+?)(?=<\/p)' outputfile|while read user;do
  read id
  echo "$user $id"
done

请注意, look-behind 表达式的长度不能可变。这意味着您无法使用量词?*+等,也可以在其中使用不同长度的项目。

对于可变长度标签awk可能非常适合oneliner标签:

awk '/User ID/{print ""}/p *>/{printf $3}' FS='(p *>|<)' outputfile

答案 1 :(得分:1)

这应该有效(sed扩展正则表达式):

sed -nr 's#<\s*p\s*>([^>]*)<\s*/\s*p\s*>#\1#p' file | tr -d '\n'

输出:

XYZ User ID:2989288174