Usando isto:
grep -A1 -B1 "test_pattern" file
produzirá uma linha antes e depois do padrão correspondente no arquivo. Existe uma maneira de exibir não linhas, mas um número especificado de caracteres?
As linhas no meu arquivo são muito grandes, então não estou interessado em imprimir a linha inteira, mas apenas observar a correspondência no contexto. Alguma sugestão de como fazer isso?
Respostas:
3 caracteres antes e 4 caracteres depois
fonte
brew install homebrew/dupes/grep
e execute-o comoggrep
.Isso corresponderá a até 5 caracteres antes e depois do seu padrão. A opção -o diz ao grep para mostrar apenas a correspondência e -E para usar uma expressão regular estendida. Coloque as aspas em torno de sua expressão, caso contrário, ela poderá ser interpretada pelo shell.
fonte
{0,255}
obras{0,256}
dágrep: invalid repetition count(s)
Você poderia usar
fonte
Você quer dizer assim:
?
Isso imprimirá até vinte caracteres de cada lado
test_pattern
. A\{0,20\}
notação é como*
, mas especifica de zero a vinte repetições em vez de zero ou mais.-o
Diz para mostrar apenas a correspondência em si, e não a linha inteira.fonte
grep: Invalid content of \{\}
Com
gawk
, você pode usar a função de correspondência:Se você estiver de acordo com
perl
uma solução mais flexível: A seguir, serão impressos três caracteres antes do padrão, seguidos pelo padrão real e, em seguida, 5 caracteres após o padrão.Isso também pode ser aplicado a palavras em vez de apenas caracteres. A seguir, uma palavra será impressa antes da sequência de caracteres real.
A seguir, imprimirá uma palavra após o padrão:
A seguir, imprimirá uma palavra antes do padrão, depois a palavra real e depois uma palavra após o padrão:
fonte
Você pode usar o regexp grep para encontrar + segundo grep para destacar
23_string_and
fonte
Nunca me lembrarei facilmente desses modificadores de comando enigmático, então peguei a resposta superior e a transformei em uma função no meu
~/.bashrc
arquivo:Aqui está o que parece em ação:
O arquivo em questão é uma linha contínua de 25K e é impossível encontrar o que você está procurando usando
grep
.Observe as duas maneiras diferentes de chamar
cgrep
essegrep
método de paralelos .Existe uma maneira "mais inteligente" de criar a função em que "$ 2" é passado apenas quando definido, o que economiza 4 linhas de código. Eu não tenho isso à mão. Algo como
${parm2} $parm2
. Se eu o encontrar, revisarei a função e esta resposta.fonte