【发布时间】:2014-09-19 19:58:27
【问题描述】:
我想在文件的每一行上依次运行 2 个不同的 grep,以便它按照输入文件中出现的顺序输出匹配项。我有一个名为 temp.txt 的简单文件,我将在此示例中使用它。该文件的内容是:
$ cat temp.txt
line1 a
line2 b
line3 c
我有以下代码,我通过使用 echo 而不是第一个 grep 进行了简化。
#! /bin/bash
cat temp.txt | while read line
do
echo $line
grep b $line
done
我以为输出会是:
line1 a
line2 b
line2 b
line2 c
但我得到以下输出:
$ ./debug.sh
line1 a
grep: line1: No such file or directory
grep: a: No such file or directory
line2 b
grep: line2: No such file or directory
grep: b: No such file or directory
line3 c
grep: line3: No such file or directory
grep: c: No such file or directory
【问题讨论】:
-
grep假定参数是一个文件,使用 here 字符串将变量作为标准输入grep b <<< "$line" -
“我想在文件的每一行上依次运行 2 个不同的 grep,以便它按照输入文件中出现的顺序输出匹配项” 这样做,如果它与 both 模式匹配,您最终将编写 twice 行。这是故意的吗?
-
在文件的每一行上调用
grep对于大量行来说会很慢。考虑改用bash的内置正则表达式匹配,或组合正则表达式,以便您可以使用对grep的单个调用来读取整个文件。