less com opção -F e correspondência de padrão

2

De um script, quero invocar less em um arquivo e fazer com que ele imprima a saída para o console, em vez de uma nova tela. Se o arquivo for pequeno o suficiente para caber em uma tela, quero desabilitar a rolagem. Se for mais do que uma tela, quero poder percorrê-lo, mas, assim que chegar ao final, quero que less retorne o controle para o console. As linhas também devem ser cortadas (não há problema em perder o final das seqüências após a janela do console nesse caso).

Eu também gostaria de destacar um certo padrão.

Aqui está o que estou usando para argumentos:

less -SFXE -p "ccc" fileToShow.txt

Eu uso -S para cortar linhas longas, -FX para detectar se o arquivo tem menos linhas que o console e imprimir todo o texto no console sem rolagem, e -E para sair do less quando eu ' Cheguei ao final do arquivo, para os casos em que o texto é mais longo que o console e preciso de rolagem.

Funcionam bem até eu adicionar a opção -p para realçar correspondências.

Suponha que fileToShow.txt contenha isto:

aaa
bbb
ccc
ddd
eee

Sem o switch padrão, eu entendo:

[evan@localhost] $ less -SFXE fileToShow.txt
aaa
bbb
ccc
ddd
eee
[evan@localhost] $ 

Quando eu adiciono a correspondência de padrões, menos imprime as linhas vazias até a altura do console (usando o tils para mostrar as linhas vazias).

[evan@localhost] $ less -SFXE -p "ccc" fileToShow.txt
ccc
ddd
eee
~
~
~
~
~
~
~
~
[evan@localhost] $ 

Existe alguma maneira de usar a opção -p e não mostrar essas linhas vazias ao usar -F ? (Nota: a linha "ccc" é destacada como desejado, eu só tenho esse efeito colateral não intencional.)

Meu shell é bash 3.2.25 e minha versão menor é 436 . OS é RHEL.

    
por Evan W 06.08.2015 / 00:08

2 respostas

1

O seguinte comando pode ser encapsulado em um arquivo em lotes:

 grep --color=always -E "^|$2" "$1"|less -SFXER

O parâmetro $1 é o nome do arquivo e $2 é o padrão de pesquisa. Pontos a serem observados:

  • grep -E (ou egrep ) permite corresponder a mais de um padrão de pesquisa;
  • correspondendo a ^ (início da linha) garante que todas as linhas sejam listadas;
  • a correspondência de $2 faz com que a string de pesquisa seja destacada;
  • grep --color=always copia as seqüências de escape de destaque para o pipe;
  • less -R faz com que less reproduza o realce em vez de mostrar a sequência de escape.

Não é a melhor solução, mas algum tipo de resposta. Observe que o comando listará todas as linhas, destacando o padrão, enquanto less -p omite as linhas à frente da primeira correspondência: para reproduzir isso, você precisará usar sed .

    
por 06.08.2015 / 13:25
0

Existe outra maneira, tudo em less . Envolve alguns passos, no entanto.

  1. less fileToShow.txt
  2. Acertar &ccc (assumindo que ccc é o padrão que você está procurando). Na página man:

    &pattern: Display only lines which match the pattern; lines which do not match the pattern are not displayed. If pattern is empty (if you type & immediately followed by ENTER), any filtering is turned off, and all lines are displayed. While filtering is in effect, an ampersand is displayed at the beginning of the prompt, as a reminder that some lines in the file may be hidden. Certain characters are special as in the / command: ^N or ! Display only lines which do NOT match the pattern. ^R Don't interpret regular expression metacharacters; that is, do a simple textual comparison.

  3. Finalmente, pressione F para retomar o recuo
por 15.08.2016 / 11:48

Tags