Answers:
AWK
使用AWK
-这是最简单的方法:
awk '/yellow/,0' textfile.txt
样品运行
$ awk '/yellow/,0' textfile.txt
yellow
red
orange
more orange
more blue
this is enough
格列普
您还可以使用grep
with --after-context
选项,在比赛后打印一定数量的行
grep 'yellow' --after-context=999999 textfile.txt
要自动设置上下文,可以使用$(wc -l textfile.txt)
。基本思想是,如果您有第一行作为匹配项,并且想在该匹配项后打印所有内容,则需要知道文件中的行数减去1。幸运的是,--after-context
不会抛出关于行数,因此您可以给它完全超出范围的数字,但是如果您不知道,则总行数可以
$ grep 'yellow' --after-context=$(wc -l < textfile.txt) textfile.txt
yellow
red
orange
more orange
more blue
this is enough
如果要缩短该命令,--after-context
则该命令与-A
和相同$(wc -l textfile.txt)
,将扩展为行数,后跟文件名。这样一来,您textfile.txt
只需输入一次
grep "yellow" -A $(wc -l textfile.txt)
蟒蛇
skolodya@ubuntu:$ ./printAfter.py textfile.txt
yellow
red
orange
more orange
more blue
this is enough
DIR:/xieerqi
skolodya@ubuntu:$ cat ./printAfter.py
#!/usr/bin/env python
import sys
printable=False
with open(sys.argv[1]) as f:
for line in f:
if "yellow" in line:
printable=True
if printable:
print line.rstrip('\n')
或者不带printable
标志
#!/usr/bin/env python
import sys
with open(sys.argv[1]) as f:
for line in f:
if "yellow" in line:
for lines in f: # will print remaining lines
print lines.rstrip('\n')
exit()
grep "yellow" -A $(wc -l < "my colors.txt") "my colors.txt"
。
您可以通过以下方式实现:
awk '/yellow/{f=1}f' file
其中“文件”是包含您的文本的文件名。
晚会:)
使用grep
:
grep -Pzo '(?s)\n\Kyellow\n.*' file.txt
-P
使我们能够使用与Perl兼容的Regex
-z
使输入文件由ASCII NUL分隔,而不是换行符
-o
只需要所需的部分
(?s)
是DOTALL修饰符,使我们能够使用令牌.
(任何字符)匹配换行符
在\n\K
,\n
一个换行符相匹配,\K
放弃比赛
yellow\n.*
匹配yellow
后跟换行符,此后的所有内容也会被选中并显示在输出中。
例:
% grep -Pzo '(?s)\n\Kyellow\n.*' file.txt
yellow
red
orange
more orange
more blue
this is enough
使用小python
:
#!/usr/bin/env python2
with open('file.txt') as f:
lines = f.readlines()
print ''.join(lines[lines.index('yellow\n'):])
lines
是包含文件所有行的列表(也带有尾随换行符)
lines.index('yellow\n')
给我们的最低指数lines
在那里yellow\n
被发现
lines[lines.index('yellow\n'):]
将使用列表分片获得部分从开始yellow\n
直到结束
join
将连接列表中的元素以字符串形式输出
yellow
在line..also如果不是这样,那么我们需要改变python
一个人的算法中..
grep
与仅与整行不匹配。我赞成。
grep
命令简化为grep "yellow" -A $(wc -l textfile.txt)
。