7

在一个非常大的文件中,我需要找到一个字符串的位置(行号),然后提取该字符串上方和下方的 2 行。

立即执行此操作 - 我启动 vi,找到字符串,记下它的行号,退出 vi,然后使用 sed 提取该字符串周围的行。

有没有办法简化这个过程......理想情况下根本不需要运行 vi。

4

5 回答 5

12

也许像这样使用grep:

grep -n -2 your_searched_for_string  your_large_text_file

会给你几乎你所期望的

-n :告诉 grep 打印行号

-2 :打印 2 附加行(当然还有想要的字符串)

于 2012-10-05T16:26:44.733 回答
10

你可以做

grep -C 2 yourSearch yourFile 

要将其发送到文件中,请执行

grep -C 2 yourSearch yourFile > result.txt
于 2012-10-05T16:26:49.990 回答
4

用于grep -n string file在不打开文件的情况下查找行号。

于 2012-10-05T16:26:42.510 回答
2

您可以使用cat -n显示行号,然后用于awk获取 a 之后的行号grep以提取行号:

cat -n FILE | grep WORD | awk '{print $1;}'

虽然grep已经做了你提到的,如果你给-C 2(高于/低于2行):

grep -C 2 WORD FILE
于 2012-10-05T16:26:37.407 回答
1

您可以使用 grep-A-B选项来执行此操作,如下所示:

grep -B 2 -A 2 "searchstring" | sed 3d

grep 将找到该行并显示前后两行上下文,稍后用 sed 删除第三行。

于 2012-10-05T16:29:42.050 回答