使用 sed 循环遍历文件中的记录并对所有记录使用 grep

使用 sed 循环遍历文件中的记录并对所有记录使用 grep

我正在尝试从一个文件中的另一个文件中查找字符串,并且我需要打印一次搜索字符串,然后打印匹配的行。

我想要查找匹配的字符串位于一个文件中,每个记录有 2 行,没有空行等。第 1 行包含名称,第 2 行包含我需要在第二个文件中查找的字符串。sed -n '1~2p'将打印所有名称,但我只需要打印第一个名称,将第二行的值传递给 grep,执行 grep 命令,然后打印第二条记录的名称(第 3 行),将第 4 行传递给 grep 等等。另一种方法是使用whileuntil循环,计数器递增 2,但我不知道如何将计数器的值传递给sed

答案1

如果我理解正确的话,那么

$ head File\ {1..3}
==> File 1 <==
foo
Pattern 1
bar

==> File 2 <==
foo
bar
baz

==> File 3 <==
Pattern 3
foo
baz

$ cat infile
File 1
Pattern 1
File 2
Pattern 2
File 3
Pattern 3

然后

$ sed -E '$!N; s/(.*)\n(.*)/grep -H -- "\2" "\1"/e' infile
File 1:Pattern 1

File 3:Pattern 3

或者

$ while read -r file; do 
    if read -r pattern; then grep -H -- "$pattern" "$file"; fi
  done < infile 
File 1:Pattern 1
File 3:Pattern 3

相关内容