Mik*_*e B 8 grep scripting bash variable
CentOS 6.x
我想从 curl、grep 获取两个完全独立的字符串的输出,并将它们各自的值分配为变量。执行此操作的最有效方法是什么(不将输出写入磁盘)?
通常我会想到有一个类似的脚本:
#!/usr/bin/env bash
foo1=$(curl https://domain.com/file.xml | grep string1)
foo2=$(curl https://domain.com/file.xml | grep string2)
Run Code Online (Sandbox Code Playgroud)
但这最终需要两次传球,而且效率极低。有没有更好的办法?希望有一个涉及更少通行证的解决方案?
slm*_*slm 11
尝试这个:
foo1=$(curl https://domain.com/file.xml | grep -E "string1|string2")
Run Code Online (Sandbox Code Playgroud)
这将运行curl1 次并 grep 出现string1or string2。
如果它们是不同的变量,则稍微改变策略。捕获 的输出,curl然后再捕获grep。
output=$(curl https://domain.com/file.xml)
foo1=$(echo "$output" | grep "string1")
foo2=$(echo "$output" | grep "string2")
Run Code Online (Sandbox Code Playgroud)
您还可以将结果存储在数组中而不是单独的变量中。
output=$(curl https://domain.com/file.xml)
readarray foo < <(echo "$output" | grep "string1|string2")
Run Code Online (Sandbox Code Playgroud)
如果来自 grep 的结果可能不会返回结果,则处理这个有点棘手,因为来自“string2”的结果可能是数组中的第一个或第二个项目,但我在这里提供它只是作为演示该方法。
另一种使用read命令和进程替换 ( <( ..cmd..)) 的方法。
$ read -d"\n" foo1 foo2 \
<(curl https://domain.com/file.xml | grep -E "string1|string2")
Run Code Online (Sandbox Code Playgroud)
如果对“string1”的搜索没有返回任何内容,导致“string2”的任何匹配出现在$foo1. 此外,这种方法往往不如上面的 #2 或 #3 便携。
| 归档时间: |
|
| 查看次数: |
7887 次 |
| 最近记录: |