linux命令之grep的-o选项
linux-dash
A beautiful web dashboard for Linux
项目地址:https://gitcode.com/gh_mirrors/li/linux-dash
免费下载资源
·
这个选项说的是, 只输出匹配的部分.
在写shell抓取网页内容时, 开始不知道这个选项,
后来居然用上了perl的HTML::TokeParser,
我只想说, 喜新厌旧是人类最好的品质, 不然怎么来那么多创新…(心里一阵自嘲),
虽然走了很多弯路, 但是也解决了问题.
场景还原如下:
一份html内容(page.html), 里面有几个hidden的input, 内容简化如下(前后的…表示其他内容):
...
<input type="hidden" name="fd" value="Q2m4nLJN4aGSAYmtrsIZAw6vnQRy" />
<input type="hidden" name="execution" value="e1s1" />
<input type="hidden" name="_eventId" value="submit" />
...
这三个东西都比较关键, 想着给一个name(如execution), 取出value(e1s1);
尝试如下:
[root@localhost grep-o]# cat page.html | grep 'name="execution" value="[a-zA-Z0-9-]\+".*>'
<input type="hidden" name="execution" value="e1s1" />
这样找到的是name=.../>
这部分
知道了有-o
参数(只输出匹配的部分), 那就简单了
[root@localhost grep-o]# cat page.html | grep 'name="execution" value="[a-zA-Z0-9-]\+".*>' | grep -o 'e[0-9][0-9a-zA-Z]\+'
e1s1
沿用这个思路, 其他两个也是类似的处理方法.
另附上当时写的perl文件, 以后少走弯路!
#!/usr/bin/perl –w
require HTML::TokeParser;
# 调试用的模块, 类似php的var_dump
use Data::Dumper;
# 获取登录页面的隐藏字段的内容
# usage:
# perl parseContent.pl page.html
$loginHtml = $ARGV[0]; # 登录页面文件
# $fieldName = $ARGV[1]; # 隐藏字段的名字(name值)
# print $loginHtml;
$parser = HTML::TokeParser->new("$loginHtml") ||
die "Can't open: $!";
# 存储名值, 关联数组
my @arr1 = ();
while (my $token = $parser->get_tag("input")) {
# if (!$name) {continue;}
# 没有name的跳过
next unless my $name = $token->[1]{name};
my $value = $token->[1]{value};
$arr1{$name} = $value;
# push @arr1, $name;
# push @arr1, $value;
# last; # break;
}
# print Dumper(@arr1);
# print $arr1{$fieldName} || '---';
$fieldFilename = 'tmp/fields.txt';
system("rm -rf $fieldFilename");
foreach my $name (keys %arr1) {
system("echo $name=$arr1{$name} >> $fieldFilename");
}
另外,附几个实用的选项
- -A --after-context=NUM print NUM lines of trailing context
打印匹配行的紧随的后面几行 - -C (
-C num
)打印上下几行 - -l (小写字母l), 只打印包含匹配的文件名
- -i 忽略大小写
- -r 递归查找(对于在一个目录下的文件查找非常有用)
- -v 寻找不匹配的行
欢迎补充指正!
GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e
added ecosystem file for PM2 4 年前
5def40a3
Add host customization support for the NodeJS version 4 年前
更多推荐
已为社区贡献7条内容
所有评论(0)