如何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
我正在尝试从 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