terça-feira, 3 de novembro de 2015

O comando cut exemplos praticos Shell Linux


 
 

10 Exemplos Práticos do comando cut 
O comando CUT do shell linux é usado para processamento de texto, muito útil para extrair fragmentos de texto ou linhas inteiras, de um arquivo pre selecionado.

Este tutorial prove alguns exemplos páticos do comando cut, muito útil
para  ser usado no dia dia  Para trabalharmos os exemplos usarei o arquivo
 /etc/passwd, nativo em todas as distribuições linux.
$ cat  /etc/passwd
edson@edson:~$ cat /etc/passwd 
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
libuuid:x:100:101::/var/lib/libuuid:
syslog:x:101:104::/home/syslog:/bin/false
messagebus:x:102:106::/var/run/dbus:/bin/false
usbmux:x:103:46:usbmux
daemon,,,:/home/usbmux:/bin/false 
dnsmasq:x:104:65534:dnsmasq,,,:/var/lib/misc:/bin/false
ntp:x:105:110::/home/ntp:/bin/false
whoopsie:x:106:114::/nonexistent:/bin/false
Display Manager:/var/lib/lightdm:/bin/false 
Wellington:x:1000:1000:WelingtonPessotti,,,:/home/Wellington:/bin/bash 
jetty:x:108:120::/usr/share/jetty:/bin/false

edson@edson:~$

1 – Selecinando uma coluna de caracteres Para extrair apenas a coluna desejada
 de um arquivo usa-se a opção -c.
O exemplo abaixo ilustra a opção, exibindo o segundo caractere de cada linha do arquivo.
$ cut -c2 /etc/passwd  *algumas linhas foram deletas economia de espaço
edson@edson-MCP61M-M3:~$
cut -c2 /etc/passwd 
o
a
i
h
i
d
e
u
t

os caracteres acima são o segundo caractere de cada linha do arquivo
etc/passwd
2– Selecionando uma sequencia de caracteres
Uma sequência de caracteres pode ser extraída apenas especificando os
limites da posição de começo e fim, no comando abaixo será
extraído os três primeiros caracteres.
$ cut -c1-3  /etc/passwd
edson@edson-MCP61M-M3:~$ cut -c1-3  /etc/passwd (resultado resumido)
roo
dae
bin
sys
syn
gam
man
eds
jet
pul
rtk
edson@edson-MCP61M-M3:~$

3 – Selecionando uma cadeia de caracteres com ponto de inicio e fim
ambas referencias podem ser utilizadas pra se extrair caracteres isto
e feito com a opção  -c
O comando abaixo utilizas apenas a referencia  -c3- esta opção extrai
todos os  caracteres contando a partir da terceira coluna inclusive.
$ cut -c3- /etc/passwd
edson@edson-MCP61M-M3:~$ cut -c3- /etc/passwd 
ot:x:0:0:root:/root:/bin/bash
emon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
n:x:2:2:bin:/bin:/usr/sbin/nologin
htdm:x:107:115:Light
Display Manager:/var/lib/lightdm:/bin/false 
son:x:1000:1000:Edson
Pessotti,,,:/home/edson:/bin/bash 
tty:x:108:120::/usr/share/jetty:/bin/false

edson@edson-MCP61M-M3
Agora vomas pegar a partir da 18ª coluna
$cut -c-18 /etc/passwd
edson@edson-MCP61M-M3:~$ cut -c18- /etc/passwd 
root:/bin/bash
on:/usr/sbin:/usr/sbin/nologin
n:/usr/sbin/nologin
v:/usr/sbin/nologin
ome/ntp:/bin/false


edson@edson-MCP61M-M3:~$

A linha inteira pode ser extraída  com o seguinte comando.
$ cut -c1-  /etc/passwd
edson@edson-MCP61M-M3:~$ cut -c1- /etc/passwd 
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
lightdm:x:107:115:Light
Display Manager:/var/lib/lightdm:/bin/false 
edson:x:1000:1000:Edson
Pessotti,,,:/home/edson:/bin/bash 
jetty:x:108:120::/usr/share/jetty:/bin/false

edson@edson-MCP61M-M3:~$

4– Para selecionar uma parte expecífica de uma linha
Se ao invés de querer selecionar um numero de caracteres, você quisesse extrair
 um determinado campo sem se preocupar com o tamanho deles, então podemos
 usar a opção -d em conjunto com a  opção -f. 
A opção  -f expecífica qual o  campo você quer extrair, e a opção -d especifica
 qual é o delimitador, por exemplo  : ou /. no arquivo passwd o primeiro campo se 
refere aos usuários e é delimitado por : assim para se extrair todos os nomes dos 
usuários do arquivo, basta selecionar totos os caracteres até o primeiro ' : ' ser
 encontrado.
root:x:0:0:root:/root:/bin/bash
Como segue no exemplo:
$ cut -d':' -f1 /etc/passwd
edson@edson-MCP61M-M3:~$  cut -d':' -f1 /etc/passwd 
root
daemon
bin
ys
edson
jetty
pulse
rtkit

edson@edson-MCP61M-M3:~$

Vamos usar o / ele vai selecionar tudo ate  o primeiro caractere / ser
encontrado.
cut -d'/' -f1 /etc/passwd
edson@edson-MCP61M-M3:~$ cut -d'/' -f1 /etc/passwd 
root:x:0:0:root:
daemon:x:1:1:daemon:
ntp:x:105:110::
whoopsie:x:106:114::
lightdm:x:107:115:Light
Display Manager: 
edson:x:1000:1000:EdsonPessotti,,,: 
edson@edson-MCP61M-M3:~$

5 - Selecionando múltiplos campos de um arquivo.
Podemos extrair mais de um campo de uma linha
root:x:0:0:root:/root:/bin/bash, temos no primeiro campo o nome do usuario = root
, no sexto seu diretório veja que cada campo e delimitado por : : e no ultimo o
shell que ele utiliza = /bin/bash no exemplo abaixo vamos selecionar o nome e o 
tipo de shell utilizado. para isso dois comandos o grep ira selecionar as linhas que 
contem /bin/bash e o cut -d’:’ -f1,6 o campo 6 que  é o diretório do usuário.
edson@urutau:~$ grep "/bin/bash" /etc/passwd | cut -d':' -f1,6
root:/root
edson:/home/edson
edson@urutau:~$

Para mostrar do primeiro campo até p 4 e mais o campo 6 e o 7, usamos o
comando abaixo:
edson@urutau:~$ grep "/bin/bash" /etc/passwd | cut -d':' -f1-4,6,7
root:x:0:0:/root:/bin/bash
edson:x:1000:1000:/home/edson:/bin/bash
6 -  Selecionando campos delimitador inexistente.
No exemplo vamos usar o delimitador  | ‘como não encontra ele mostra
a linha inteira.
edson@urutau:~$ grep "/bin/bash" /etc/passwd | cut -d '|' -f1
root:x:0:0:root:/root:/bin/bash
edson:x:1000:1000:Edson
Pessotti,,,:/home/edson:/bin/bash
edson@urutau:~$
Mas se utilizarmos a opção -s só será mostrado as linha que contém  o delimitar |,
 como no arquivo não existe nenhum | não vai mostrar nada.
$ grep "/bin/bash" /etc/passwd | cut -d'|' -s -f1
7 - Podemos também excluir um campo, listando todos os campos menos o
referenciado. usaremos a opção –complement.
Vamos exibir todos os campos menos o campo 7

edson@urutau:~$
grep "/bin/bash" /etc/passwd | cut -d':' --complement -s -f7
root:x:0:0:root:/root
edson:x:1000:1000:Edson
Pessotti,,,:/home/edson
edson@urutau:~$

8 - Podemos também mudar o delimitador para o display trocando : por #, para
isso usamos a opção –output-delimiter como mostrado no exemplo abaixo:
edson@urutau:~$
 grep "/bin/bash" /etc/passwd | cut -d':'  -s -f1,6,7 --output-delimiter='#'
root#/root#/bin/bash
edson#/home/edson#/bin/bash
edson@urutau:~$

9. Mudando o delimitador de saída para nova linha
 Neste exemplo, todos os domínios da saída do comando cut é exibido em uma
 linha separada. Nós ainda estamos usando a opção --output-delimiter, mas o valor
 agora é $ '\ n' o que ira acrescentar uma nova linha como o delimitador de saída.


edson@urutau:~$
 grep edson  /etc/passwd | cut -d':' -f1,6,7 --output-delimiter=$'\n'
edson
/home/edson
/bin/bash
edson@urutau:~$


10. Podemos combinar cut com outro Command Unix de saída
O poder do comando cut pode ser realizado quando você o combina com o stdout de algum outro comando Unix.
Depois de dominar o uso básico do comando cut que foi explicado acima, você podera usar com sabedoria este comando e fazer mitos tipos de corte para resolver muitos dos seus requisitos de manipulação de texto.
O exemplo a seguir indica como você pode extrair apenas informações úteis a partir da saída do comando ps. Também mostramos como temos filtrada a saída do comando ps com grep e sed antes o resultado final foi dado o comando para cortar. Aqui, nós usamos -d opção de corte e -f que nós explicamos nos exemplos acima.

edson@urutau:~$ ps aux | grep ntp | sed 's/\s\+/ /g' | cut -d' ' -f2,11-
2143
/usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 105:110
2507
grep --color=auto ntp
edson@urutau:~$


Com os comandos ensinados já dá pra fazer bastante coisa e só praticar e ir incrementando, espero que tenha sido útil.

Até o Proximo post.

Nenhum comentário:

Postar um comentário

Megacubo par Linux e Wnidows - Assistir TV no Computador

                            MEGACUBO PARA LINUX Ola!! Neste  post vamos falar  um pouquinho sobre o  Megacubo, um tradicional programa ...