unix - 如何为 Perl 脚本的每一行输出运行 curl 命令?

标签 unix command-line find

我有一个 perl 脚本,它写出一个充满整数的数组到标准输出,每个都在单独的一行上。所以我会得到如下输出:

412
917
1
etc

我想做的是能够将此脚本的输出通过管道传输到 xargs,并使用每个整数进行 curl 调用。像这样:

cat input.json | ./jsonValueExtracter.pl -s exampleId | xargs curl http://brsitv01:8080/exampleId/$1 > example$1.json

下面是我正在使用的一个简单脚本的摘录。

my @values;
while(<STDIN>) {
     chomp;
     s/\s+//g; # Remove spaces
     s/"//g; # Remove single quotes
     push @values, /$opt_s:(\w+),?/g;
}

print join(" \n",@values);

但是,这并不像我期望的那样工作。当我运行以下命令时:

cat input.json | perl jsonValueExtracter.pl -s exampleId | xargs echo http://brsitv01:8080/exampleId/$1

我得到输出:

http://brsitv01:8080/exampleId/ 412 917 1

要在 xargs 中使用 perl 脚本的输出,我需要做什么特别的事情吗?

谢谢

最佳答案

xargs 不会那样使用 $1。 $1 是空白,xargs 只是将数字放在命令行的末尾。

你可能想像这样使用 bash for 循环:

for i in `./jsonValueExtracter.pl -s exampleId < input.json`
do
  curl http://brsitv01:8080/exampleId/$i > example$i.json
done

可以用分号写在一行上:

for i in `./jsonValueExtracter.pl -s exampleId < input.json`; do curl http://brsitv01:8080/exampleId/$i > example$i.json; done

请注意,您不需要猫:

cat [file] | script.foo

相当于:

script.foo < [file]

关于unix - 如何为 Perl 脚本的每一行输出运行 curl 命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1741900/

相关文章:

python - 简单 Python 代码中的 Str 对象错误

command-line - Xcode 命令行工具 (XCode 4.6) 从终端运行单元测试

macos - 在 macOS 上打印可执行文件的 rpath

unix - Windows上的Cygwin与真正的UNIX环境有什么区别

c - 获取c程序中的所有函数及其长度

regex - 获取 unix/linux 目录/子目录中任意位置文件名匹配模式的所有文件

使用 gcc 的 c++ 命令行编译

python - 如何使用Python在满足两个条件的数组中查找值

linux - 查找:如何强制非零退出状态

linux - 如何将命令的一部分存储到变量中