bash:使用值列表多次运行命令

bash:使用值列表多次运行命令

我需要多次运行命令,每次都使用一个新值:

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

将其保存valuesvalues.txt文件中,每行单独保存。

相关内容