在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 723|回复: 10

[求助] 用shell对进行文件数据处理

[复制链接]
发表于 2023-10-13 17:54:56 | 显示全部楼层 |阅读模式
10资产


大佬们,我想用xargs配合grep去抓一个文档里的多个关键词,但是写了一半不会了,我这里面key.txt是带有需要抓的关键词的文档,out.txt是输出的文档,我被抓数据的文档应该怎么写进去啊
cat key.txt | xargs -I {} grep "{}" > out.txt

最佳答案

查看完整内容

grep -E可以使用扩展的正则表达式,被查找文件key.txt通过cat打开然后通过管道传给grep 或者更简短的: egrep "{}|{}" key.txt > out.txt
发表于 2023-10-13 17:54:57 | 显示全部楼层


灰色 发表于 2023-10-16 10:26
大佬,这里面是把 -E替换成我的被查找文件吗?上周五刚开始学,还有点迷糊 ...


grep -E可以使用扩展的正则表达式,被查找文件key.txt通过cat打开然后通过管道传给grep


或者更简短的:
egrep "{}|{}" key.txt > out.txt
发表于 2023-10-13 18:36:39 | 显示全部楼层
cat key.txt | grep -E "{}|{}" > out.txt
 楼主| 发表于 2023-10-16 10:26:15 | 显示全部楼层


zero_0 发表于 2023-10-13 18:36
cat key.txt | grep -E "{}|{}" > out.txt


大佬,这里面是把 -E替换成我的被查找文件吗?上周五刚开始学,还有点迷糊
发表于 2023-10-16 10:39:24 | 显示全部楼层
sed 也可以实现

举例 , 要制作真实网址下载连结的清单
https://archive.org/download/sega-dreamcast-redump-collection

右键检视网页原始檔 先拷贝出所要抓的部份 存成input.txt
input.txt 如下
   <td><a href="102%20Dalmatians%20-%20Puppies%20to%20the%20Rescue%20%28UK%29.chd">102 Dalmatians - Puppies to the Rescue (UK).chd</a></td>
...

用sed 将 原本  a href 换成 实际网址 https://archive.org/download  ...  并输出成 dc_d.txt 清单
指令如下:
sed -n 's/.*<a href="\([^"]*\)">.*<\/a>.*/a href\/download\/sega-dreamcast-redump-collection\/\1/p' input.txt  > dc_d.txt


         
 楼主| 发表于 2023-10-16 11:33:03 | 显示全部楼层


zero_0 发表于 2023-10-16 10:52
grep -E可以使用扩展的正则表达式,被查找文件key.txt通过cat打开然后通过管道传给grep


啊不是,key.txt里面包含的是需要去查找的关键词,关键词有好几个,我想让他依次去查找;还有另一个文件是被查找的文件我们在这里假定他叫test.txt。
我现在的问题是我写出来了查找的指令,但是不知道怎么把被查找的文件写进去,我挂的那个代码就是我的半成品

发表于 2023-10-16 12:04:00 | 显示全部楼层
cat key.txt | grep -e keyword1 -e keyword2 > out.txt

sed 也可以实现
sed -n '/ch1/,/ch2/p' key.txt > out.txt


         
发表于 2023-10-16 12:20:34 | 显示全部楼层


灰色 发表于 2023-10-16 11:33
啊不是,key.txt里面包含的是需要去查找的关键词,关键词有好几个,我想让他依次去查找;还有另一个文件 ...


懂了,相当于轮流去grep, 这样出来的结果会有重复行:

cat key.txt | xargs -I '{}' -egrep {} test.txt > out.txt
 楼主| 发表于 2023-10-16 13:59:12 | 显示全部楼层


zero_0 发表于 2023-10-16 12:20
懂了,相当于轮流去grep, 这样出来的结果会有重复行:

cat key.txt | xargs -I '{}' -egrep {} test.txt ...


大佬牛啊,我终于成了
 楼主| 发表于 2023-10-16 14:00:18 | 显示全部楼层


xiexie57 发表于 2023-10-16 12:04
cat key.txt | grep -e keyword1 -e keyword2 > out.txt

sed 也可以实现


大佬强啊,我正好需要搞出来输出之后再处理一下,加上你这句正好
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-29 00:02 , Processed in 0.029833 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表