linux 在使用grep时,如何跳过第一行和最后一行?

pes8fvy9  于 2023-01-20  发布在  Linux
关注(0)|答案(3)|浏览(305)

我使用grep查找当前目录中包含单词"hello"的所有文件:

grep -l 'hello' *

给定这些文件:

  • 测试1 *
hello
hi
how are you
stuff
  • 测试2 *
welcome
hello
etc
  • 测试3 *
hey
there
hello

输出为:

test1
test2
test3

但是,我想在这些文件中搜索单词"hello",但是跳过第一行和最后一行,所以我的输出是:

test2

我知道我可以使用以下命令忽略第一行和最后一行:

sed '1d;$d' *

但是有没有什么方法可以把它和grep一起使用,这样它就可以忽略每个文件的第一行和最后一行?如果没有,我到底该如何使用grep来跳过每个文件的第一行和最后一行呢?

yr9zkbsy

yr9zkbsy1#

就像这样:

for file in *; do sed '1d;$d' "$file" | grep -q hello && echo "$file"; done
jtoj6r0c

jtoj6r0c2#

此任务更适合awk

awk 'FNR == 1 {p=""; next}
     p ~ /hello/ {print FILENAME; nextfile}
     {p = $0}' test*

test2

对于每次迭代,不需要多次循环和调用外部实用程序sedgrep

hgb9j2n6

hgb9j2n63#

您可以使用以下代码解决此问题:

grep 'hello' test* | tail -n +2 | head -n -1

相关问题