怎么用命令行抽出一个文件的每一行,过滤出 ID,然后对每个调用 curl?

2021-03-23 18:44:17 +08:00
 0x47

场景是这样的:有一个 log 文件,里面每一行都是类似 xxxxid=12345xxxx,x 是其他字符。我要从每一行里抽出 id,然后调用 API 。

我现在的做法是,先cat file | xargs -n1 -I {} sh -c "echo {} | grep -o -E id=[0-9]* | grep -o -E [0-9]*",把所有 id 逐行打印出来后、手动保存成另一个文件 file2 。

接着cat file2 | xargs -n1 -I{} sh -c "curl example.com/is/{} | grep -E 'id|status',打印所有调用 API 的结果。

有啥简单的方法,一行可以搞定的么?环境受限,只能用命令行工具。

1734 次点击
所在节点    程序员
8 条回复
Cooky
2021-03-23 18:47:52 +08:00
cat | sed | xargs
PTLin
2021-03-23 19:37:01 +08:00
```
for i (`cat foo.txt`) {echo $i|rg -o '.*id=(.*)' -r '$1' >> out.txt}
```
这个是 zsh 配上 ripgrep 实现的
IgniteWhite
2021-03-23 20:43:01 +08:00
awk 最适合
lizliz
2021-03-23 22:24:18 +08:00
perl -lane 'if(/AC=(\d+)/){system("curl www.baidu.com/$1");}'
lizliz
2021-03-23 22:35:43 +08:00
awk '{a=gensub(/.*AC=([0-9]+).*/,"\\1","g");print "curl www.xxx/" a}' xx.file |sh

awk 也行哈,不过一般 linux 都有 perl
huangmingyou
2021-03-24 10:26:39 +08:00
我一般习惯 awk , xargs 不太好用。
rizon
2021-03-24 10:58:25 +08:00
如果条数不多(看电脑性能千行估计也没啥问题)

Change/Select All Occurrences
很多工具都有类似功能 多行编辑,配合 单词跳转光标。
几秒钟搞定的事。

---

如果连工具也没有,用我的在线笔记工具 notelive.cc
也有这个功能,文本编辑框 鼠标邮件就看到了。
omph
2021-03-24 17:13:28 +08:00
grep -oP '(?<=id=)[0-9]+' file.log | while read -r id; do curl "example.com/$id"; done

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/764374

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX