我正在尝试从一个文件中的另一个文件中查找字符串,并且我需要打印一次搜索字符串,然后打印匹配的行。
我想要查找匹配的字符串位于一个文件中,每个记录有 2 行,没有空行等。第 1 行包含名称,第 2 行包含我需要在第二个文件中查找的字符串。sed -n '1~2p'
将打印所有名称,但我只需要打印第一个名称,将第二行的值传递给 grep,执行 grep 命令,然后打印第二条记录的名称(第 3 行),将第 4 行传递给 grep 等等。另一种方法是使用while
或until
循环,计数器递增 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