Você está na página 1de 15

Instituto Superior de Engenharia do Porto Departamento de Engenharia Informtica

SISTEMAS OPERATIVOS I

Utilizao da shell (metacaracteres) Manipulao de ficheiros de texto

Revisto em Setembro de 2004

Sandra Machado

Berta Batista

Sugestes e participaes de erros para: bbatista@dei.isep.ipp.pt

ISEP - DEI - SISTEMAS OPERATIVOS I

UTILIZAO DA SHELL (Metacaracteres) MANIPULAO DE FICHEIROS DE TEXTO ndice


1 1.1 1.2 1.3 UTILIZAO DO INTERPRETADOR DE COMANDOS (SHELL) ..............................................................3 Interpretao e execuo de comandos ........................................................................................3 Localizao dos comandos ...........................................................................................................3 Metacaracteres de expanso ........................................................................................................3 1.3.1 Asterisco ( * ) .....................................................................................................................4 1.3.2 Ponto de interrogao ( ? ) ..................................................................................................4 1.3.3 Parntesis Recto ( [ ] ) ........................................................................................................4 1.3.4 Chavetas ( { } )...................................................................................................................4 1.3.5 Til ( ~ ) ..............................................................................................................................4 1.3.6 Os caracteres de "disfarce" ( \ , " ", ' ' ) ................................................................................4 1.4 Metacaracteres de redireco de Input e Output ...........................................................................5 1.4.1 Sinal de menor (<) ..............................................................................................................5 1.4.2 Sinal de maior (>) ...............................................................................................................6 1.4.3 Duplo sinal de maior (>>) ...................................................................................................6 1.4.4 Stderr .................................................................................................................................6 1.5 Pipes e filtros ..............................................................................................................................6 1.5.1 O comando tee....................................................................................................................8 1.6 Exemplos de aplicao.................................................................................................................9 1.7 QUESTES1 (para resolver na aula) .............................................................................................9 1.8 QUESTES2 (para resolver em casa) ............................................................................................9 2 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 MANIPULAO DE FICHEIROS DE TEXTO....................................................................................... 11 Contagem de linhas num ficheiro de texto .................................................................................. 11 Substituir caracteres num ficheiro de texto.................................................................................. 11 Extrair colunas num ficheiro de texto .......................................................................................... 11 Colar ficheiros......................................................................................................................... 11 Juntar ficheiros de texto com campos comuns............................................................................. 12 Numerar as linhas de um ficheiro ............................................................................................... 13 Impresso de ficheiros............................................................................................................... 13 QUESTES1 (para resolver na aula) ...........................................................................................13 QUESTES2 (para resolver em casa) .......................................................................................... 14

Aula Prtica 4

Metacaracteres; Ficheiros de Texto

Pgina 2 de 15

ISEP - DEI - SISTEMAS OPERATIVOS I

1 UTILIZAO DO INTERPRETADOR DE COMANDOS (SHELL)


1.1 Interpretao e execuo de comandos
Aps a introduo do comando, a shell, divide o comando em palavras (por anlise dos espaos) e define o que comando, opes e nomes de ficheiros (executa o parse dos comando). Tambm procura metacaracteres, ou seja, caracteres com significado especial, como por exemplo o asterisco (*).
Nota: Um metacaracter um caracter que tem um significado especial para a shell. Quando a shell encontra um metacaracter vai tomar as aces que conhece para esse caracter. Podem ser aces de expanso (substituio por um conjunto de caracteres), de redireccionamento, etc. H tambm metacaracteres que permitem que no se interpretem os metacaracteres (metacaracteres de "disfarce").

O prximo passo o de carregar para memria o comando, passar-lhe todas as opes e nomes de ficheiros e esperar que o comando termine. Enquanto o comando processado pelo sistema operativo a shell fica bloqueada.

1.2 Localizao dos comandos


Um comando um ficheiro no sistema de ficheiros e como tal, para ser executado, necessrio que este seja localizado previamente. Contudo esta localizao no uma preocupao do sistema operativo UNIX mas sim da shell. A shell responsvel por encontrar os comandos pelo que necessrio um mecanismo que possibilita que a shell obtenha tal informao. Para encontrar comandos a shell recorre a uma lista de directrios onde deve comandos. A essa lista chamase path e est armazenada numa varivel de ambiente com o mesmo nome. A pesquisa por um comando efectuado sequencialmente na path; caso no seja encontrado a shell reporta que no encontrou o comando (Command not found.), o que no significa necessariamente que este no existe mas apenas que no se encontra em nenhum directrio da lista. Pode-se evitar o uso do path, indicando o comando com o pathname completo (Ex.: /bin/ls -l).

1.3 Metacaracteres de expanso


A maioria dos comandos que operam com ficheiros podem faze-lo com vrios ficheiros ao mesmo tempo. Se os ficheiro esto relacionados ou tm nomes semelhantes (Ex.: capitulo1, capitulo2, etc.) pode tirar-se partido de tais padres de semelhana recorrendo a metacaracteres de expanso.

Aula Prtica 4

Metacaracteres; Ficheiros de Texto

Pgina 3 de 15

ISEP - DEI - SISTEMAS OPERATIVOS I

O comportamento da shell quando encontra um metacaracter o seguinte: 1. 2. 3. 4. Retira a palavra com o metacaracter. Procura ficheiros no sistema de ficheiros que correspondem ao padro. Constri um lista com esses ficheiros. Introduz a lista no lugar da palavra que continha o metacaracter.

1.3.1 Asterisco ( * )
Este caracter especial de expanso pode ser usado em qualquer posio de um nome ou pathname e representa zero ou mais ocorrncias de qualquer caracater. Ex.: lis*ta poder equivaler a qualquer uma das seguintes: lista, lis6ta, lisrararta, etc., desde que existam.

1.3.2 Ponto de interrogao ( ? )


Tambm pode ser usado em qualquer posio de um nome de um ficheiro ou pathname, mas apenas representa uma ocorrncia de um qualquer caracter. Ex.: lista? poder equivaler a qualquer uma das seguintes: lista1, lista2, listaA, listaB, etc., desde que existam.

1.3.3 Parntesis Recto ( [

])

Tambm podem ser usados em qualquer posio de um nome de um ficheiro ou pathname, mas apenas representa uma ocorrncia de um caracter que conste entre os parntesis rectos. Ex.: lista[123] poder equivaler a qualquer uma das seguintes: lista1, lista2, lista3, mas apenas a estas e desde que existam. Este conceito tambm pode ser utilizado para representar intervalos de letras ou nmeros, aqui pode-se usar um hfen para representar um intervalo. Por exemplo, todas as letras minsculas podem ser representadas por [a-z], como analogamente todos os nmeros, ou apenas parte de um intervalo de letras ou nmeros, por exemplo [5-15].

1.3.4 Chavetas ( {

})

Este modo semelhante ao anterior, contudo permite que sejam definidos no apenas um conjunto de possibilidades para um caracter mas um conjunto de possibilidades para vrios conjuntos de caracteres, em cada conjunto est separado dos restantes por virgulas. Ex.: lis{ta,tas,tar} poder equivaler a qualquer dos seguintes, caso existam : lista, listas, listar.

1.3.5 Til ( ~ )
Este caracter especial de expanso representa o pathname completo do "homedirectory" do utilizador.

1.3.6 Os caracteres de "disfarce" ( \

, " ", ' ' )

Se por qualquer razo no se pretender que a shell interprete e substitua os metacaracteres com significado especial deve-se recorrer a caracteres de "disfarce. Assim:

Aula Prtica 4

Metacaracteres; Ficheiros de Texto

Pgina 4 de 15

ISEP - DEI - SISTEMAS OPERATIVOS I

\ - retira o significado ao caracter seguinte " " - retira o significado a todos os caracteres entre as aspas ' ' - retira o significado a todos os caracteres entre as plicas preciso notar que se quisermos usar os caracteres de disfarce tambm temos de os disfarar: $ echo hi \\ there $ hi \ there $ echo "hi \ there" $ hi \ there

1.4 Metacaracteres de redireco de Input e Output


Tendo em conta que qualquer perifrico ligado a um sistema UNIX representado por um ficheiro no sistema de ficheiros, ento desde que se possa trabalhar com ficheiros poder-se- trabalhar com qualquer dispositivo suportado pelo UNIX. Todos os comandos do sistema UNIX foram desenvolvidos para trabalhar com trs ficheiros standard especiais, que so: ! Standard input (stdin): Se o comando necessita de informao durante a execuo, dever recorrer a este ficheiro para obter essa informao. ! Standard output (stdout): Se um comando gera informao dever dirigi-la para este ficheiro. ! Standard error (stderr): Se um comando gera informao relativa a erros de execuo dever dirigi-la para este ficheiro.

Muitos dos comandos que usam um ficheiro de entrada de informao usam, por omisso, o stdin (teclado). Como quase todos os comandos que produzem informao fazem-no, por omisso, para o stdout (ecr / terminal). O mesmo se passa com mensagens de erro, apesar de estas surgirem no terminal esto, por omisso, dirigidas para o stderr ( que, como o stdout, est direccionado para o ecr / terminal). possvel redireccionar qualquer um destes ficheiros recorrendo a caracteres especiais, ou seja, metacaracteres de redireco.

1.4.1 Sinal de menor (<)


Permite alterar a entrada de informao num comando do standard input (teclado) para um ficheiro qualquer. Dever ser colocado o sinal de menor depois do comando e de seguida o nome do ficheiro que contm a informao a fornecer ao comando. Ex.:

Aula Prtica 4

Metacaracteres; Ficheiros de Texto

Pgina 5 de 15

ISEP - DEI - SISTEMAS OPERATIVOS I

1.4.2 Sinal de maior (>)


Permite alterar a sada de informao de comando do standard output (ecr) para um ficheiro. Dever ser colocado o sinal de maior depois do comando e de seguida o nome do ficheiro onde queremos que seja armazenada a informao gerada pelo comando. Caso o ficheiro exista o seu contedo substitudo com a informao gerada pelo comando, se o ficheiro no existir este criado automaticamente. Ex.:

1.4.3 Duplo sinal de maior (>>)


O funcionamento praticamente o mesmo do anterior (sinal de maior). Com a diferena deste no eliminar o contedo do ficheiro quando este j existe, neste caso, adiciona a informao gerada pelo comando ao final do ficheiro (append), mantendo a informao que j existia no ficheiro.

1.4.4 Stderr
O tratamento do standard error difere em funo da shell utilizada: ! ! Ex.: Bash e Kourne shell:

2> ( 2>> para modo append). C shell: >& ( >>& para modo append).

1.5 Pipes e filtros

Se se pretender usar a informao gerada por um comando (stdout) como entrada de informao (stdin) num outro comando, pode-se usar um ficheiro temporrio. O exemplo seguinte mostra uma forma de se obter a lista ordenada dos utilizadores ligados no sistema, recorrendo a um ficheiro temporrio. aspinto@polux:~> who ei8020036 pts/1 ei8020018 pts/0 ei8020079 pts/2 ei8010099 pts/3 ei8000019 pts/4 ei8020047 pts/5 ei8010031 pts/6 ei8010030 pts/7 ei8020064 pts/8 ei8020034 pts/9 aspinto pts/10 Nov Nov Nov Nov Nov Nov Nov Nov Nov Nov Nov 4 15:46 (192.168.3.77) 4 15:46 (192.168.3.56) 4 16:03 (192.168.3.65) 4 15:47 (192.168.3.60) 4 15:47 (192.168.3.66) 4 15:48 (192.168.3.57) 4 15:50 (192.168.3.54) 4 15:52 (192.168.3.60) 4 15:55 (192.168.3.102) 4 16:00 (192.168.3.69) 4 16:04 (192.168.3.58)

aspinto@polux:~> who > lista.txt aspinto@polux:~> sort < lista.txt aspinto pts/10 Nov Nov Nov Nov 4 16:04 (192.168.3.58) 4 15:47 (192.168.3.66) 4 15:52 (192.168.3.60) 4 15:50 (192.168.3.54)
Metacaracteres; Ficheiros de Texto Pgina 6 de 15

ei8000019 pts/4 ei8010030 pts/7 ei8010031 pts/6


Aula Prtica 4

ISEP - DEI - SISTEMAS OPERATIVOS I

ei8010099 pts/3 ei8020018 pts/0 ei8020034 pts/9 ei8020036 pts/1 ei8020047 pts/5 ei8020064 pts/8 ei8020079 pts/2 aspinto@polux:~>

Nov Nov Nov Nov Nov Nov Nov

4 15:47 (192.168.3.60) 4 15:46 (192.168.3.56) 4 16:00 (192.168.3.69) 4 15:46 (192.168.3.77) 4 15:48 (192.168.3.57) 4 15:55 (192.168.3.102) 4 16:03 (192.168.3.65)

Um pipe permite que esta operao seja feita sem recorrer a um ficheiro auxiliar, redireccionando automaticamente a sada de um comando para a entrada de outro. A representao de um pipe uma barra vertical (

|).

O resultado do exemplo seguinte o mesmo do anterior s que sem recorrer ao ficheiro temporrio. aspinto@polux:~> who | sort aspinto pts/10 Nov Nov Nov Nov Nov Nov Nov Nov Nov 4 16:04 (192.168.3.58) 4 15:47 (192.168.3.66) 4 15:52 (192.168.3.60) 4 15:50 (192.168.3.54) 4 15:47 (192.168.3.60) 4 15:46 (192.168.3.56) 4 16:00 (192.168.3.69) 4 15:46 (192.168.3.77) 4 15:48 (192.168.3.57)

ei8000019 pts/4 ei8010030 pts/7 ei8010031 pts/6 ei8010099 pts/3 ei8020018 pts/0 ei8020034 pts/9 ei8020036 pts/1 ei8020047 pts/5 aspinto@polux:~>

Podem-se encadear mais do que dois comandos com recursos a pipes, criando-se um pipeline. Quando no existem comandos que faam exactamente aquilo que se pretende, pode-se criar um pipeline, tratando a informao sequencialmente de modo a que o resultado final seja o pretendido. Contudo h quer ter em ateno que certos comando apenas podem surgir no incio de um pipeline, pela razo de que apenas geram informao e no necessitam de informao do utilizador (ex.: ls, who, date, pwd, banner, file, etc.). Tambm h comandos que apenas podem surgir no fim de um pipeline, aqueles que apenas recebem informao mas que no geram informao para o ecr (ex.: mail, write, lp, etc.).

Aula Prtica 4

Metacaracteres; Ficheiros de Texto

Pgina 7 de 15

ISEP - DEI - SISTEMAS OPERATIVOS I

Aos comandos que tanto geram informao para o ecr, como solicitam informao ao utilizador, chamamse de filtros. Os filtros podem surgir em qualquer parte de um pipeline, porque recebem informao do utilizador, processam essa informao e geram uma sada de informao para o ecr.

1.5.1 O comando tee


O comando tee, um comando especial que foi desenvolvido para ser utilizado em pipelines. O que o comando faz gerar um ou mais ficheiros com a informao que recebe e reenviar essa mesma informao para o comando seguinte num pipeline. $ tee [OPTION]... [FILE]... No exemplo seguinte, utilizando um pipeline, sero gerados dois ficheiros, um com o resultado do comando who e outro o resultado da ordenao do resultado do comando who. aspinto@polux:~> who | tee listaWho | sort > listaWhoOrdenada aspinto@polux:~> cat listaWho ei8020036 pts/1 ei8020018 pts/0 ei8020079 pts/2 ei8010099 pts/3 ei8000019 pts/4 ei8020047 pts/5 ei8010031 pts/6 ei8010030 pts/7 ei8020100 pts/8 ei8020034 pts/9 aspinto pts/10 Nov Nov Nov Nov Nov Nov Nov Nov Nov Nov Nov Nov Nov Nov Nov Nov Nov 4 15:46 (192.168.3.77) 4 15:46 (192.168.3.56) 4 16:03 (192.168.3.65) 4 15:47 (192.168.3.60) 4 15:47 (192.168.3.66) 4 15:48 (192.168.3.57) 4 15:50 (192.168.3.54) 4 15:52 (192.168.3.60) 4 16:13 (192.168.3.107) 4 16:00 (192.168.3.69) 4 16:04 (192.168.3.58) 4 16:14 (192.168.3.102) 4 16:09 (192.168.3.85) 4 16:15 (192.168.3.72) 4 16:18 (192.168.3.90) 4 16:24 (192.168.3.61) 4 16:28 (192.168.3.72)

ei8020064 pts/11 ei8020056 pts/12 ei8010115 pts/13 ei8020099 pts/14 ei8020008 pts/15 ei8010115 pts/16

aspinto@polux:~> cat listaWhoOrdenada aspinto pts/10 Nov Nov Nov Nov Nov Nov Nov Nov 4 16:04 (192.168.3.58) 4 15:47 (192.168.3.66) 4 15:52 (192.168.3.60) 4 15:50 (192.168.3.54) 4 15:47 (192.168.3.60) 4 16:15 (192.168.3.72) 4 16:28 (192.168.3.72) 4 16:24 (192.168.3.61)

ei8000019 pts/4 ei8010030 pts/7 ei8010031 pts/6 ei8010099 pts/3 ei8010115 pts/13 ei8010115 pts/16 ei8020008 pts/15

Aula Prtica 4

Metacaracteres; Ficheiros de Texto

Pgina 8 de 15

ISEP - DEI - SISTEMAS OPERATIVOS I

ei8020018 pts/0 ei8020034 pts/9 ei8020036 pts/1 ei8020047 pts/5 ei8020056 pts/12 ei8020064 pts/11 ei8020079 pts/2 ei8020099 pts/14 ei8020100 pts/8 aspinto@polux:~>

Nov Nov Nov Nov Nov Nov Nov Nov Nov

4 15:46 (192.168.3.56) 4 16:00 (192.168.3.69) 4 15:46 (192.168.3.77) 4 15:48 (192.168.3.57) 4 16:09 (192.168.3.85) 4 16:14 (192.168.3.102) 4 16:03 (192.168.3.65) 4 16:18 (192.168.3.90) 4 16:13 (192.168.3.107)

1.6

Exemplos de aplicao

Verifique a equivalncia entre os pipes e os conjuntos de comandos seguintes: $ ls -c | tee f1 $ ls -c > f1 $ cat f1 $ $ $ $ ls -c > f1 cp f1 f2 cat f1 cat f1 > f3

$ ls -c | tee f1 f2 > f3

1.7

QUESTES1 (para resolver na aula)

1) Modifique o seu path de modo a procurar apenas na directoria /usr/bin e na sua directoria corrente. Experimente utilizar comandos tais como: ls, date, who, etc. 2) Liste os nomes dos ficheiros da directoria /etc que terminam numa vogal. 3) Liste os nomes dos ficheiros da directoria /etc cuja penltima letra seja um i. 4) Liste os nomes dos ficheiros da directoria /etc cuja segunda letra seja um k ou o e a ltima letra esteja no intervalo de i at u. 5) Liste os nomes dos ficheiros da directoria /etc que comecem com ch tenham dois caracteres no meio, e terminem com a, d, p ou n. 6) Crie um ficheiro chamado data_hoje que contenha a data de hoje. 7) Acrescente a lista dos utilizadores presentes no sistema ao ficheiro criado anteriormente.

1.8

QUESTES2 (para resolver em casa)

8) Descreva o funcionamento do interpretador de comandos do UNIX. 9) Escreva o nome de 3 programas de shell. 10) Explique o porqu da utilizao da varivel path.

Aula Prtica 4

Metacaracteres; Ficheiros de Texto

Pgina 9 de 15

ISEP - DEI - SISTEMAS OPERATIVOS I

11) O que um metacaracter? 12) Como se evita que um metacaracter seja interpretado pela shell? 13) Diga a funo dos metacaracteres * ? [ ] .. 14) Diga 3 metacaracteres de redireccionamento e qual a sua funo. 15) Descreva para que serve um pipe. 16) Que atributos qualificam um comando UNIX como um filtro.

Aula Prtica 4

Metacaracteres; Ficheiros de Texto

Pgina 10 de 15

ISEP - DEI - SISTEMAS OPERATIVOS I

2 MANIPULAO DE FICHEIROS DE TEXTO


2.1 Contagem de linhas num ficheiro de texto

wc (Word Count) o utilitrio Unix que permite a contagem de linhas, palavras e caracteres num ficheiro de texto. $ wc [ -cwl ] nome_dos_ficheiros

2.2

Substituir caracteres num ficheiro de texto

O comando tr (translate) na sua forma mais simples permite substituir os caracteres especificados na string_input pelos especificados na string_output. O comando tr e um filtro, l o standard input (teclado) e devolve a sada para o standard output (monitor). O standard input pode ser redireccionado para um ficheiro (<) ou fornecido por um pipe (|). O standard output tambm pode ser redireccionado (>), embora no Unix no seja permitido usar o mesmo ficheiro como entrada e sada de um comando, pode-se contornar esta limitao recorrendo a um ficheiro temporrio. Com a opo -d, os caracteres no so substitudos, mas removidos. A opo -s remove os caracteres que se repetem, torna-se muitas vezes til para remover os duplos espaos, triplos, etc., mantendo apenas um espao. $ tr [-cds] [string_input] [string_output]

2.3

Extrair colunas num ficheiro de texto

O comando cut permite visualizar ficheiros como matrizes com linhas e colunas e permite extrair as colunas especificadas. O comando cut pode analisar o ficheiro de duas formas: os ficheiros podem ser constitudos por colunas separadas por determinado caracter (por defeito espao, mas configurvel atravs da opo -d). Para extrair colunas a este tipo de ficheiros tabulares usa-se -f seguido de uma lista de colunas a extrair (por exemplo -f1,4,3). A opo -s obriga o comando cut a suprimir linhas do ficheiro que no contenham o caracter delimitador. A opo -c permite cortar um conjunto de caracteres especificando, para isso, a sua posio na linha, por exemplo cut -c1, corta apenas o primeiro caracter de cada linha. $ cut flista [-dchar] [-s] [ficheiro] $ cut clista [ficheiro]

2.4

Colar ficheiros

Muitas vezes existe a necessidade de cortar vrias colunas a um ficheiro para depois as voltar a colar noutro com numa ordem diferente. O utilitrio Unix paste l um ou mais ficheiros e cola as colunas correspondentes pela ordem pretendida.

Aula Prtica 4

Metacaracteres; Ficheiros de Texto

Pgina 11 de 15

ISEP - DEI - SISTEMAS OPERATIVOS I

Por defeito as colunas so separadas por espao, mas podem ser separadas por qualquer caracter especificado com a opo -d, esta opo permite a utilizao de uma lista de caracteres, sendo que eles so usados ciclicamente (1, 2, 3, 1, 2, ...). A opo -s permite juntar informao de vrios ficheiros numa linha e no em colunas. O comando paste no um filtro, necessrio indicar na linha de comandos os ficheiros a usar, porque o utilitrio no l o standard input. Se em alguma situao houver a necessidade de usar o paste como filtro, deve escrever-se um hfen (-) na linha de comandos em vez do nome dos ficheiros (who | cut -f1 -d" " | paste -s -). $ paste [-s] [-dlista] [ficheiros]

2.5

Juntar ficheiros de texto com campos comuns

O comando Unix join permite juntar dois ficheiros de texto com pelo menos um campo em comum. A coluna comum chama-se referncia. Para juntar os dois ficheiros com o utilitrio join a referncia tem de estar ordenada por ordem alfabtica. Este utilitrio no um filtro, mas pode ser usado numa pipeline, substituindo o primeiro ficheiro por um hfen, como no comando paste. Quando usado sem opes o join junta os ficheiros pela primeira coluna, sempre que o campo referncia no fr o primeiro, deve usar-se a opo -j. Para exemplificar veja-se a seguinte linha de comandos: $ join -j1 4 -j2 3 exemplo1 exemplo2 Neste caso junta os ficheiros exemplo1 e exemplo2 pelo campo 4 do exemplo1 e pelo campo 3 do exemplo2. Por defeito os dois ficheiros so juntos pelo campo referncia, se alguma linha do ficheiro no contiver o respectivo campo, no exibido no resultado. Sempre que isto consista numa limitao para o utilizador, pode usar a opo -a, seguida de 1 (-a1) para o caso de querer na sada os campos que no juntou no primeiro ficheiro e analogamente para o ficheiro dois a opo -a2. O caracter delimitador tambm pode ser configurado usando o -t seguido de um caracter (-t*). Nem sempre necessrio apresentar todos os campos dos ficheiros a juntar, a opo -o permite escolher os campos a juntar, mas no mostra o campo referncia, a no ser que seja explicitamente especificado na linha. Por exemplo: $ join -o 1.3 1.4 2.2 2.3 2.5 exemplo1 exemplo2 Neste exemplo o resultado conter as colunas 3 e 4 do exemplo1 e as colunas 2,3,5 do exemplo2, o campo referncia o primeiro, visto que nada foi especificado. Outra opo que pode ser til quando se usa o comando join -e, seguida de uma string que ser exibida na sada sempre que existam campos em branco resultantes, por exemplo se na opo -o especificarmos uma coluna que no exista. A sintaxe geral do comando join : $ join [-a1 -a2] [-o lista] [-j1 no -j2 no] [-tchar] [-e string] file1 file2

Aula Prtica 4

Metacaracteres; Ficheiros de Texto

Pgina 12 de 15

ISEP - DEI - SISTEMAS OPERATIVOS I

2.6

Numerar as linhas de um ficheiro

Existe um comando que permite numerar as linhas de um ficheiro. Esse comando um filtro, no sentido em que se no for especificado nenhum ficheiro l do stdin e escreve no stdout. Pode naturalmente ser usado em qualquer posio de um pipe. A opo v seguida de um nmero permite indicar a primeira linha de numerao (por defeito a primeira). A opo i seguida de um nmero permite indicar o incremento de numerao (por defeito 1). A opo s seguida de um ou mais caracteres permite indicar a string de separao dos numeros e texto em cada linha (por defeito um tab). A sintaxe completa do comando (ver como habitualmente man nl para mais informao): $ nl [-vnumber] [-inumber] [-wnumber] [-nstring] [-lnumber] [-ba] [-sstring] [file...]

2.7

Impresso de ficheiros

O UNIX dispe de um comando que prepara um ficheiro de texto para impresso. As suas opes permitem formatar o texto (incluindo colocao de headers, footers, etc), parti-lo em pginas de tamanho configurvel, definir que pginas devem ser impressas, etc. Embora no muito utilizado pelo utilizador comum (por razes bvias) pode ser de grande valia para administradores de sistema. A sua sintaxe : $ pr [+number] [-number] [-d] [-e[character]number] [-n[character]number] [-t] [-wnumber] [-onumber] [-lnumber][-h string] [file...]

2.8

QUESTES1 (para resolver na aula)

1) Experimente as trs opes do comando wc do seguinte modo: a) Conte apenas as palavras do ficheiro passwd (-w); b) Conte apenas os caracteres do ficheiro passwd (-c); c) Conte apenas as linhas do ficheiro passwd (-l). 2) Crie uma sequncia de comandos que mostre apenas o nmero de utilizadores presentes no sistema. 3) Substitua todas as letras minsculas de um ficheiro de texto por maisculas. Verifique novamente o seu contedo. 4) Use a mesma linha de comandos da pergunta anterior, mas altere-a de modo a que as alteraes provocadas pelo comando tr fiquem guardadas no ficheiro. 5) Verifique as opes -d e -s do comando tr do seguinte modo: a) b) Apague todas as vogais do ficheiro usado acima. Crie um ficheiro chamado listagem com a listagem longa da sua HOME. Retire ao ficheiro todos os espaos que no sejam simples (duplos espaos, triplos, etc.)
Metacaracteres; Ficheiros de Texto Pgina 13 de 15

Aula Prtica 4

ISEP - DEI - SISTEMAS OPERATIVOS I

6) Crie um ficheiro nomes com todos os nomes dos ficheiros presentes no ficheiro listagem; 7) Crie uma sequncia de comandos que liste todos os ficheiros do directrio /usr/bin juntamente com o seu ultimo tempo de acesso. Guarde essa lista num ficheiro com o mesmo nome na sua HOME, num formato de 3 colunas (nome do ficheiro, dia e ms). 8) Construa uma lista com todos os utilizadores do sistema, a sua directoria e a sua shell, separe cada um dos itens com um espao e mostre o resultado num ecr de cada vez. 9) Conte o nmero de linhas de um ficheiro de texto que comecem por maisculas. 10) Crie um ficheiro, chamado nomes, com apenas o nome dos ficheiros retirado do ficheiro listagem. Crie um ficheiro, chamado permisses, com as permisses associadas a cada ficheiro listado. Crie um ficheiro chamado nomes+perm que contenha apenas duas colunas, a primeira com os nomes dos ficheiros e a segunda com as permisses. 11) Considere os ficheiros abaixo: turmas Pedro Nuno Patricia Ricardo Luis A B B F F horario 3 4 4 5 5 A B B F F Pedro Nuno Patricia Ricardo Luis

a) Escreva uma linha de comandos que junte as colunas 1,2 do ficheiro turmas com as colunas 1 e 2 do ficheiro horrio, separe as colunas com o caracter :; b) Os ficheiros acima podem ser juntos por outra coluna que no a primeira, qual? Que alterao seria preciso fazer nos ficheiros?

2.9

QUESTES2 (para resolver em casa)

12) Indique o comando que conta as linhas de um ficheiro assim como as suas opes. 13) Crie uma sequncia de comandos que mostre o nmero de ficheiros e directrios da sua directoria HOME. 14) Qual a funcionalidade do comando tr? Explique para que servem as opes -d e -s do comando tr. 15) Crie uma linha de comandos que substitua todos os caracteres "\"para "*" e os "," para "-" no ficheiro /etc/group. 16) Explique como que pode utilizar um ficheiro como entrada e sada de um comando UNIX. 17) Crie uma sequncia de comandos que mostre quantos nveis abaixo da directoria root est localizado o seu directrio corrente. 18) Qual o comando que permite extrair colunas a um texto? Explique o interesse das opes -f e -d do comando referido na alnea anterior. 19) Explique como que pode extrair as colunas de 21 a 43 de um texto ASCII. 20) Qual a funcionalidade do comando paste ? Para que servem as opes -d e -s deste comando.

Aula Prtica 4

Metacaracteres; Ficheiros de Texto

Pgina 14 de 15

ISEP - DEI - SISTEMAS OPERATIVOS I

21) Qual o nome de ficheiro que permite que o comando paste seja utilizado num pipe. 22) Como se utiliza o comando join e que caractersticas devem ter os campos que se querem juntar. 23) Crie uma linha de comando que permita juntar o campo 3 de um ficheiro com os campos 1 e 5 de outro ficheiro. 24) Qual o comando que permite mostrar um ficheiro com as suas linhas numeradas? Para que servem as opes -v e -i deste comando.

Aula Prtica 4

Metacaracteres; Ficheiros de Texto

Pgina 15 de 15