场景是这样的:有一个 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 的结果。
有啥简单的方法,一行可以搞定的么?环境受限,只能用命令行工具。
cat | sed | xargs
```
for i (`cat foo.txt`) {echo $i|rg -o '.*id=(.*)' -r '$1' >> out.txt}
```
这个是 zsh 配上 ripgrep 实现的
awk 最适合
perl -lane 'if(/AC=(\d+)/){system("curl www.baidu.com/$1");}'
awk '{a=gensub(/.*AC=([0-9]+).*/,"\\1","g");print "curl www.xxx/" a}' xx.file |sh
awk 也行哈,不过一般 linux 都有 perl
我一般习惯 awk , xargs 不太好用。
如果条数不多(看电脑性能千行估计也没啥问题)
Change/Select All Occurrences
很多工具都有类似功能 多行编辑,配合 单词跳转光标。
几秒钟搞定的事。
---
如果连工具也没有,用我的在线笔记工具 notelive.cc
也有这个功能,文本编辑框 鼠标邮件就看到了。
grep -oP '(?<=id=)[0-9]+' file.log | while read -r id; do curl "example.com/$id"; done