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