找回密码
 注册

手机号码,快捷登录

手机号码,快捷登录

查看: 2234|回复: 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 也可以实现

大佬强啊,我正好需要搞出来输出之后再处理一下,加上你这句正好
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|关于我们|联系我们|隐私声明|EETOP 创芯网 ( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2026-1-16 06:01 , Processed in 0.034116 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表