grep mudando o delimitador

10

de alguma forma podemos mudar o delimitador que usa grep?

Acho que, por padrão, o grep usa \n como delimitador.

    
por studiohack 13.05.2010 / 22:11

4 respostas

1

Você se importa com a saída, tr pode funcionar para você:

che@nok ~ $ grep cpu /proc/cpuinfo | tr '\n' ';'
cpu family      : 6;cpu MHz             : 800.000;cpu cores     : 2;cpuid level : 10;cpu family : 6;cpu MHz : 800.000;cpu cores      : 2;cpuid level : 10;
    
por 13.05.2010 / 22:22
1

agrep da Universidade do Arizona permite que você defina o delimitador. Não é um substituto fácil para o grep; ele usa um algoritmo diferente (grep aproximado, pode corresponder a erros) e tem uma sintaxe de padrão diferente. Mas é uma ferramenta útil.

Infelizmente, acho que por causa dos problemas de licenciamento, houve vários projetos semelhantes chamados agrep e nem todos são compatíveis. Mas acho que todas as versões permitem que você defina um delimitador.

    
por 13.05.2010 / 23:20
1
case $# in
0|1|2)  cat >&2 <<EOF
    Usage: $0 delimiterstring pattern files....
    Behaves like grep -pdelimiterstring but on linux
    DOES NOT SUPPORT MOST ARGUMENTS
    unlike grep -p - leaves delimiterstring in output

    NO -p just the delimeterstring
    note: delimiterstring has to work in the sed command where the ${d} is
    if you are going to use @ in the delimeter string, then the @'s
    need to be replaced by someother character

EOF
    exit 0
;;
3)  mode=one ;;
*)  mode=many ;;
esac
d="${1}"
p="${2}"
shift 2
while [ $# -gt 1 ]
do
    sed "s@${d}@\x00@g" "${1}" | grep -z  "${p}" -  | (
        case $mode in 
        many) sed -e "s@\x00@${d}@g"  -e "s@^@${1}: @" ;;
        *)    sed -e "s@\x00@${d}@g"  ;;
        esac
    )
    shift
done
    
por 26.03.2014 / 21:22
0

Como é isso? Qualquer uso?

grep file "search-string" |awk 'BEGIN{RS="\n";ORS="@"}{print}'

Defina '@' para o que for adequado à sua necessidade.

    
por 14.07.2010 / 16:53