在一个非常大的文件中,我需要找到一个字符串的位置(行号),然后提取该字符串上方和下方的 2 行。
立即执行此操作 - 我启动 vi,找到字符串,记下它的行号,退出 vi,然后使用 sed 提取该字符串周围的行。
有没有办法简化这个过程......理想情况下根本不需要运行 vi。
在一个非常大的文件中,我需要找到一个字符串的位置(行号),然后提取该字符串上方和下方的 2 行。
立即执行此操作 - 我启动 vi,找到字符串,记下它的行号,退出 vi,然后使用 sed 提取该字符串周围的行。
有没有办法简化这个过程......理想情况下根本不需要运行 vi。
也许像这样使用grep:
grep -n -2 your_searched_for_string your_large_text_file
会给你几乎你所期望的
-n :告诉 grep 打印行号
-2 :打印 2 附加行(当然还有想要的字符串)
你可以做
grep -C 2 yourSearch yourFile
要将其发送到文件中,请执行
grep -C 2 yourSearch yourFile > result.txt
用于grep -n string file
在不打开文件的情况下查找行号。
您可以使用cat -n
显示行号,然后用于awk
获取 a 之后的行号grep
以提取行号:
cat -n FILE | grep WORD | awk '{print $1;}'
虽然grep
已经做了你提到的,如果你给-C 2
(高于/低于2行):
grep -C 2 WORD FILE
您可以使用 grep-A
和-B
选项来执行此操作,如下所示:
grep -B 2 -A 2 "searchstring" | sed 3d
grep 将找到该行并显示前后两行上下文,稍后用 sed 删除第三行。