Команда Grep "-C" на всей машине
Я использую grep -C 1 "matching string" "xty.pom"
Это работает на машинах Linux, но тот же код не работает на других платформах, таких как AIX, SunOS_x64, HPUX.
Есть ли альтернатива этому, чтобы одна и та же логика кода работала на всех платформах?
1 ответ
Это будет работать как grep -C 1 "matching string"
но должен работать на платформах, которые не поддерживают grep -C
опция:
awk '/matching string/{print last; f=2} f{print; f--} {last=$0}' File
Как это устроено
/matching string/{print last; f=2}
Если текущая строка соответствует регулярному выражению
matching string
затем распечатайте предыдущую строку (которая была сохранена вlast
) и установитьf
до 2.f{print; f--}
Если
f
отличен от нуля, затем вывести текущую строку и уменьшитьf
,last=$0
Задавать
last
равно содержанию текущей строки.
улучшение
С некоторыми незначительными изменениями мы можем лучше обрабатывать перекрывающиеся совпадения:
awk '/a/{if (NR>1 && !f)print last; f=3} f>1{print} f{f--} {last=$0}'
Как пример вывода с перекрывающимся совпадением:
$ printf '%s\n' a a b | awk '/a/{if (NR>1 && !f)print last; f=3} f>1{print} f{f--} {last=$0}'
a
a
b
ВС /Solaris
Родной awk на Sun/Solaris, как известно, заполнен ошибками. Используйте вместо nawk
или еще лучше /usr/xpg4/bin/awk
или же /usr/xpg6/bin/awk