如何grep特定行

How to grep particular lines

我正在尝试从 URL 获取一些 ID。

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

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

当我打开这个输出文件时,我发现了以下几行。

< p >XYZ User ID:< /p>

< /td >

< td>

< p>2989288174< /p>

所以使用 grep 或任何其他东西我如何打印以下输出

XYZ User ID:2989288174

假设一个常量 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 }' FS='(p *>|<)' outputfile

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

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

输出:

XYZ User ID:2989288174