awk - 多个 grep 通配符顺序
问题描述
例子:
我有一个脚本
grep "foo" /home/user_a/*/*_test >> list
grep -o "bar" /home/user_b/*/*_word >> list
printf "\n" >> list
如何运行两个 grep 以使 * 在同一个迭代中?
假设所有文件下/home/user_a
只有一个字符串“foo”,而“bar”下的文件/home/user_b
如何得到这个:
foobar
foobar
foobar
代替:
foofoofoobarbarbar
我们可以把通配符想象成一个 for 循环,迭代所有匹配的文件。
不是在运行第二个 grep 之前等待第一个 grep 完成,而是第一个 grep 在第一个结果处停止并转到第二个 grep 并获得第一个结果,然后再次返回到第一个 grep,依此类推..
解决方案
如果要在两个命令的输出之间交替,grep
在这种情况下为命令,则使用paste
,如下所示:
paste <(grep -h "foo" /home/user_a/*/*_test) <(grep -ho "bar" /home/user_b/*/*_word)
由于您似乎不希望输出中的文件名,我将-h
选项添加到两个 grep 命令。
更简单的例子
要查看如何paste
组合两个不同命令的输出,请尝试以下操作:
$ paste <(echo a; echo b) <(echo 1; echo 2)
a 1
b 2
推荐阅读
- database - 具有设置值的内部联接的 Oracle 更新语句
- excel - 用于创建不在现有表中的随机数的函数
- html - 使用 3D 效果将图像从前视图旋转到左视图
- r - 如何使用 R 找到至少两个 HbA1c 值超过 6.5 且至少相隔两年的患者
- docker - docker run nginx:latest 无限期挂起
- php - “status”:“401”,“code”:“NOT_AUTHORIZED”,“title”:“身份验证凭据丢失或无效。”
- windows-10 - VBoxManage 在 Windows 10 上抛出 VERR_ACCESS_DENIED 错误
- android - Mac - Unreal 4.24.3 - Oculus Quest - Gradle - 错误:错误:/bin/sh failed with args -c '"/Users/.../gradle/gradlew" :app:assembleDebug'
- aws-appsync - 使用 Appsync 解析器映射模板解码 JWT
- php - 如何在 PHP 的不同块中调用函数?