Category Archives: manipulação de texto

Unix: Como substituir letra maiúscula por minúscula em um arquivo

Para converter letras maiúsculas em letras minúsculas em um arquivo em sistemas Unix, pode-se usar o comando tr com a sintaxe a seguir:

tr '[:upper:]' '[:lower:]' < [arquivo] > [novoarquivo]

O comando tr pode ser usado para diversas outras manipulações de caracteres. Para mais informações consulte a man page do comando: man tr

O link a seguir tem mais informa̵̤es sobre o comando tr no AIX 7: AIX 7 РHelp Information РCommands Рtr

 

Saída de um comando ou arquivo: Como pular a primeira linha de uma lista

Há mais de uma maneira de pular a primeira linha de uma lista, seja essa lista um arquivo ou a saida de um comando.

Uma maneira bem simples é usar o comando tail com a opção +2:

tail +2 [nomedoarquivo]

O +2 no comando tail não está dizendo exatamente para pular a primeira linha, mas sim para exibir a lista a partir da segunda linha o que vai significar na prática a mesma coisa. No entanto, você pode usar o tail com +3, +4, etc, iniciando a listagem a partir de qualquer linha que se deseje.

Da man page do comando tail:

“If the first character of N (the number of bytes or lines) is a `+’, print beginning with the Nth item from the start of each file, otherwise, print the last N items in the file.

Referências:

  1. Man page do comando tail: http://unixhelp.ed.ac.uk/CGI/man-cgi?tail
  2. Forum – tópico (Best way to skip first line?): http://www.daniweb.com/forums/thread80245.html (precisa de registro no site)

Sed – Dica: Como substituir uma palavra em vários arquivos

Um uso bem simples do SED. Supondo que você tenha quatro scripts denominados menu1.sh, menu2.sh, menu3.sh e menu4.sh, e você queira substiuir o valor de uma variável que ocorre em todos os scripts.

Ex: nomeservidor=teste1

Para cada servidor em que você for colocar os seus scripts, precisará mudar o valor desta variável. Para isso você pode fazer o seguinte for, utilizando o comando sed para fazer a substituição em todos de uma vez:

for i in `ls menu*`
do
sed "s/teste1/teste2/g" $i > $i.NEW
mv $i.NEW $i
done

O loop acima está fazendo o seguinte: para cada [arquivo], ele faz a substituição e direciona para um novo arquivo, [arquivo].NEW. Em seguida, ele move o [arquivo].NEW contendo os dados corretos para o [arquivo].

 

Como remover ^M de arquivos no VI

Quando transportamos um arquivo do Windows para o Unix e o editamos no VI, muitas vezes encontramos aqueles ^M no final de cada linha.

Como remover o ^M?

Para isso pode-se usar no vi:

:%s/^V^M//g

OBS: Onde vemos acima ^V^M significa que deve-se digitar [CTRL]+V e [CTRL]+M e não digitar o caracter ^ seguido das letras V e M.

Ao digitar a linha acima, ficará da seguinte maneira:

:%s/^M//g

Referência:

As informações deste post foram retiradas do link:

  1. http://www.tech-recipes.com/unixnotes_tips150.html

Uso interessante do awk РOp̤̣o system

O awk é uma ferramenta muito poderosa e tenho consciência que não uso 1/1000 do que ela oferece.

Descobri um uso interessante da ferramenta, que é a utilização da opção system que já premite executar diretamente o comando utilizando o campo selecionado.

Ex:

O comando lsvgfs lista os filesystems do VG:

# lsvgfs rootvg
/
/usr
/var
/tmp
/home
/opt

Utilizando o awk com a opção system, podemos por exemplo, desmontar os filesystems chamando o comando umount dentro do awk, fazendo tudo numa única linha de comando:

# lsvgfs rootvg | awk '{system("umount "$1)}'

 

Referência

Para saber mais sobre awk:

  1. http://www.gnu.org/software/gawk/
  2. http://en.wikipedia.org/wiki/AWK_%28programming_language%29

Concatenando arquivos na horizontal

Quando falamos em concatenar arquivos, sempre nos lembramos do comando cat, que concatena os arquivos verticalmente, colocando o conteúdo sequencialmente um abaixo do outro.

E se queremos colocar o conteúdo dos arquivos um ao lado do outro, concatenando horizontalmente?

Para isso, o unix tem o comando paste.

# paste  

Para saber mais sobre os comandos citados cheque a man page:

# man cat
# man paste

 

Referência

Online man pages:

  1. Comando paste
  2. Comando cat