Grep -p para Linux ou Cygwin

Colaboração: Eduardo Sousa

Data de Publicação: 28 de agosto de 2015

Sou usuário constante do AIX, sempre me questionei, porque não existe a facilidade do grep -p no Linux.

Da escassa informação encontrada no Oráculo, verifiquei que era possível utilizar Perl e o todo poderoso AWK para esta tarefa.

Então, mãos a obra:

Para filtrar um arquivo com o awk uso a seguinte syntax:

awk '/filtro/' arquivo.txt
more arquivo.txt | awk '/filtro/'

Para filtrar um arquivo com o awk definindo linha,campo e delimitador, uso a seguinte syntax:

awk '/filtro/' RS= 'ORS=\n\n' FS= 'OFS=\n'
more arquivo.txt | awk '/filtro/' RS= 'ORS=\n\n' FS= 'OFS=\n'

Explicativo:

No comando acima insiro o valor do Filtro, Separo o registro com 2 linhas vazias no final e Separo o campo de cada registro com uma linha vazia.

FS = Separador de Campo
OFS = Saída do Separador de Campo
RS = Separador de Registro
ORS = Saída do Separador de Registro

Utilizando a mesma linha acima, aproveitei e criei o grep -vp

awk '!/filtro/' RS= 'ORS=\n\n' FS= 'OFS=\n' arquivo.txt
more arquivo.txt | awk '!/filtro/' RS= 'ORS=\n\n' FS= 'OFS=\n'

Para facilitar o dia-adia criei o script abaixo:

Obs: Para criar o grep-vp adicionar ! na penúltima linha ( !/'"$STRING"'/{print} )

#!/bin/sh
#
# Grep -p for Cygwin or Linux
#
# Author: Eduardo Sousa        Date: 25/08/2015
#
# Copy "alias grep-p='/bin/grep-p'" in ~/home/user/.bashrc
#
# Syntax: grep-p or grep_p
#
STRING="$1"
INFILE="$2"
awk '
BEGIN {
RS=""
ORS="\n\n"
FS="\n"
OFS="\n"
}
/'"$STRING"'/{print}
' ${INFILE}
Eduardo Sousa, UNIX/Linux user, trabalha como Analista de Telecomunicações e TI desde 1999.

[ Retornar ao Índice ]