我有一个类似于以下内容的文件:
abcdef
123
ghiflk
234
sfhskdhf
483
Run Code Online (Sandbox Code Playgroud)
我想搜索一个字符串,输出还应包括下一行(和/或上一行)。
例如:
grep "bcd" myfile
Output:
abcdef
123
Run Code Online (Sandbox Code Playgroud)
或显示上一行:
grep "ifl" myfile
Output:
123
ghiflk
Run Code Online (Sandbox Code Playgroud)
我已经尝试了几天在网上找到解决方案,但似乎无法弄清楚。
Ste*_*n D 14
GNU 和 BSDgrep
实用程序具有-A
匹配后行的-B
选项和匹配前行的选项。因此,您可以执行以下操作:
$ grep -A 1 bcd myfile
abcdef
123
Run Code Online (Sandbox Code Playgroud)
在比赛结束后显示这条线和
$ grep -B 1 ifl myfile
123
ghiflk
Run Code Online (Sandbox Code Playgroud)
显示匹配之前的行。最后,您可以使用-C
来显示匹配前后的 N 行:
$ grep -C 1 ifl myfile
123
ghiflk
234
Run Code Online (Sandbox Code Playgroud)
如果您的版本grep
不支持此功能,您可以尝试其他一些方法:
将 POSIXgrep
和sed
选项与 shell 一起使用:
n=$(grep -n bcd foo | cut -d':' -f1); sed -n "${n},$((n + 1))p" myfile
Run Code Online (Sandbox Code Playgroud)使用 AWK
awk '/bcd/ {print; getline; print}' myfile
Run Code Online (Sandbox Code Playgroud)还有很多很多。
除了 Steven D 提到的选项之外,GNU grep 接受一个(未记录的)arg 到 -n 选项,该选项指定要在匹配行之前和之后打印的行数。当然,使用 -n 会打开行编号,因此如果您不想要行号,那么 -A 和 -B 选项会更好。
例如,grep -n1 pattern
表现得像grep -n -A1 -B1 pattern
正如 don_crissti 在评论中提到的,这实际上并不是该-n
选项的未记录参数。-NUM
(其中NUM
是整数)实际上是-C NUM
选项的同义词,因此-nNUM
实际上是-n -C NUM
.
归档时间: |
|
查看次数: |
12017 次 |
最近记录: |