Linux equivalente do comando "begin" da Cisco

2

No Cisco IOS, você pode filtrar e manipular a saída de comandos usando várias ferramentas internas. Alguns deles têm equivalentes claros do Linux. Por exemplo, 'exclude' e 'include' fornecem o comportamento 'grep -v' e 'grep'.

O comando "begin" emitirá todo o texto de entrada após corresponder a um padrão RegEx. Existe um equivalente no Linux para esse tipo de comportamento?

    
por Aquadisco 23.01.2012 / 23:33

4 respostas

5

Claro, é fácil de fazer usando o awk:

$ echo -e 'a\nb\nc\nd' | awk '{if (p) {print;}} /^b$/ { print; p=1;}'
b
c
d

$ echo -e 'a\nb\nc\nd' | awk '{if (p) {print;}} /^b$/ { p=1;}'
c
d

Estes também podem ser abreviados como (graças a @ manatwork):

$ echo -e 'a\nb\nc\nd' | awk '/^b$/{p=1} p'
b
c
d

$ echo -e 'a\nb\nc\nd' | awk 'p; /^b$/{p=1}'
c
d

Colocá-lo em um script de shell conveniente é deixado como um exercício para o usuário.

    
por 23.01.2012 / 23:40
4

grep -A1000 search fornece 999 linhas de saída após cada linha correspondente.

    
por 24.01.2012 / 00:22
3

Use less e, em seguida, / para pesquisar:

petrus@hive:/usr/bin$ ls -l | less
total 535796
-rwxr-xr-x 1 root   root        30244 2011-02-23 14:22 [
lrwxrwxrwx 1 root   root            8 2011-05-26 01:22 2to3 -> 2to3-2.7
-rwxr-xr-x 1 root   root           96 2011-04-11 21:07 2to3-2.7
[...]
-rwxr-xr-x 1 root   root         9588 2011-02-24 09:43 appres
-rwxr-xr-x 1 root   root         6930 2011-05-20 23:53 apr-1-config
:

E agora, digitando / , o prompt 'less' ( : ) será alterado. Se eu pesquisar "lsusb":

-rwxr-xr-x 1 root   root         9588 2011-02-24 09:43 appres
-rwxr-xr-x 1 root   root         6930 2011-05-20 23:53 apr-1-config
/lsusb
lrwxrwxrwx 1 root   root           13 2011-05-26 01:24 lsusb -> ../sbin/lsusb
-rwxr-xr-x 1 root   root       114528 2010-11-24 18:16 ltrace
[...]
    
por 24.01.2012 / 00:04
1

Isso é bastante fácil no sed: imprima todas as linhas da primeira linha que corresponde ao padrão até a última linha ( $ ).

sed -n '/pattern/,$p'

Se você quiser omitir a linha que corresponde ao padrão, exclua tudo e inclua-o.

sed '1,/pattern/d'
    
por 25.01.2012 / 02:22