![bash:使用值列表多次运行命令](https://linux22.com/image/1358826/bash%EF%BC%9A%E4%BD%BF%E7%94%A8%E5%80%BC%E5%88%97%E8%A1%A8%E5%A4%9A%E6%AC%A1%E8%BF%90%E8%A1%8C%E5%91%BD%E4%BB%A4.png)
我需要多次运行命令,每次都使用一个新值:
grep VALUE0 myfile.txt
grep VALUE1 myfile.txt
grep VALUE2 myfile.txt
因为 grep 命令是“特制”的(并非总是相同),而且只有 VALUE 列表始终相同,所以我不想将 grep 命令放入 bash 文件中的循环中。我更愿意将 VALUE 列表保存在单独的文件(如“values.txt”)中,并让特制的 shell 命令循环遍历从“values.txt”读取的这个值列表。
答案1
来自grep
手册:
-f 文件, --file=文件
从 FILE 获取模式,每行一个。空文件包含零个模式,因此不匹配任何内容。(-f 由 POSIX 指定。)
您可以创建一个包含模式的文件,每行一个,然后运行grep -f patternfile …
。也许它不适合你,但如果没有明确的例子就很难知道。
答案2
您可以使用以下方法执行此操作xargs
:
xargs -a values.txt -I {} grep {} myfile.txt
这意味着文件values.txt
被读取,一次一行,然后grep ... myfile.txt
运行命令,其中...
被替换为读取的行的内容(我使用{}
它是因为这find
也是使用的。)
话虽如此,我也可以告诉你,
egrep 'VALUE0|VALUE1|VALUE2' myfile.txt
您可以一次搜索多个文本。
答案3
尝试这个:
#!/bin/bash
while read value
do
grep $value myfile.txt
done < values.txt
将其保存values
在values.txt
文件中,每行单独保存。