50 command-line grep
我经常会grep -n whatev文件找到我正在寻找的东西.说输出是
1234: whatev 1
5555: whatev 2
6643: whatev 3
Run Code Online (Sandbox Code Playgroud)
如果我想在1234和5555之间提取线条,是否有工具可以做到这一点?对于静态文件,我有一个脚本,它执行文件的wc -l然后进行数学运算以使用tail和head将其拆分,但这对于不断写入的日志文件来说效果不佳.
Sco*_*hio 78
尝试使用http://linuxcommando.blogspot.com/2008/03/using-sed-to-extract-lines-in-text-file.html中提到的sed .例如使用
sed '2,4!d' somefile.txt
Run Code Online (Sandbox Code Playgroud)
从somefile.txt的第二行到第四行打印.(别忘了查看http://www.grymoire.com/Unix/Sed.html,sed是一个很棒的工具.)
jav*_*e42 23
以下命令将执行您在someFile中 "提取1234和5555之间的行"的要求.
sed -n '1234,5555p' someFile
如果我理解正确,您希望在两个行号之间找到一个模式.awk one-liner可能是
awk '/whatev/ && NR >= 1234 && NR <= 5555' file
Run Code Online (Sandbox Code Playgroud)
您不需要运行grep后跟sed.
Perl单线:
perl -ne 'if (/whatev/ && $. >= 1234 && $. <= 5555') {print}' file
Run Code Online (Sandbox Code Playgroud)
小智 5
如果你能保证你想要的位置,行号就可以了。多年来,我最喜欢的味道是这样的:
sed "/First Line of Text/,/Last Line of Text/d" filename
Run Code Online (Sandbox Code Playgroud)
它删除从第一个匹配的行到最后一个匹配的所有行,包括那些行。
使用 sed -n和“ p ”而不是“ d ”来打印这些行。对我来说更有用,因为我通常不知道这些线在哪里。