Я могу выполнить следующую команду, если перенесу myfile
в среду с python
в наличии:
cat myfile | python filter.py
filter.py
import sys
results = []
for line in sys.stdin:
results.append(line.rstrip("\n\r"))
start_match = "some text"
lines_to_include_before_start_match = 4
end_match = "some other text"
lines_to_include_after_end_match = 4
for line_number, line in enumerate(results):
if start_match in line:
for x in xrange(line_number-lines_to_include_before_start_match, line_number):
print results[x]
print line
for x in xrange(line_number+1, len(results)):
if end_match in results[x]:
print results[x]
for z in xrange(x+1, x+lines_to_include_after_end_match):
print results[z]
break
else:
print results[x]
print ""
Но среда, в которой яхочу запустить это в не имеет питона.Является ли мой единственный выбор для преобразования этого в Perl, который, как я знаю, существует в среде?Есть ли простая команда sed или awk для этого?
Я пробовал следующее, но это не совсем дает то, что я ищу, так как пропускает строки +/- 4:
cat myfile | sed -n '/some text/,/some other text/p'
[РЕДАКТИРОВАТЬ: скрипт Python говорит, что lines_to_include_after_end_match равен 4, но на самом деле он возвращает 3]