![查找包含字符串但不在正确行上的文件](https://linux22.com/image/1555956/%E6%9F%A5%E6%89%BE%E5%8C%85%E5%90%AB%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%BD%86%E4%B8%8D%E5%9C%A8%E6%AD%A3%E7%A1%AE%E8%A1%8C%E4%B8%8A%E7%9A%84%E6%96%87%E4%BB%B6.png)
从给定的目录中,我想确定哪些文件:
- 包含
pattern
- 但不在第 1 行
我知道如何做第 1 部分——grep -nHRF [pattern] [path]
但是,我希望根据与匹配pattern
但未出现在第 1 行的内容进行过滤。
答案1
就像是:
grep -n 'pattern' path | grep -v ':1:'
答案2
使用sed
地址范围:
sed -n '2,/pattern/p' file
pattern
它将从文件的第二行开始打印匹配的行。
答案3
grep -nHRF pattern path
但如果没有第 1 行,使用 GNU sed 则会是:
shopt -s nullglob globstar
for f in path/**; do
sed -n '1n; /pattern/{F;=;p}' "$f"
done | paste -d: - - -
您需要对文件进行迭代,否则=
将输出所有文件的所有行的累积行号,并且1n
只会匹配第一个文件的第一行。