Arquivos de Tags: Programação

[SED] Introdução ao sed

Introdução ao sed

Afinal o que é sed e para que ele serve? O sed é uma ferramenta muito interessante, considero junto com cut e tr as ferramentas mais sensacionais dos sistemas unix-like, ele nos permite substituir, remove, modificar, adicionar strings ou caracteres em determinadas posições. Complicou? Vamos simplificar então!

Imagine que você tem um texto enorme de 15 mil linhas e você precisa trocar todas as ocorrências da palavra chuchu por abacate! O que fazer? Vai tentar trocar termo por termo na mão? Obvio que você não é masoquista para tentar algo como isso.

O exemplo acima pode ser solucionado de uma forma muito simples, assumindo que o arquivo de 15 mil linhas se chama arquivo-sacana.txt vamos executar:

$ cat arquivo-sacana.txt| sed 's/chuchu/abacate/'

Explicando o comando assim:

$ → cifrão indica que você está logado com um usuário não root

cat → comando que exibi um arquivo-sacana

arquivo-sacana.txt → o arquivo que tem 15 mil linhas

| → joga o resultado do comando antes da | para o próximo comando, no caso o sed

sed – > o comando sed, dã

s/chuchu/abacate/ → aqui está a mágica!

Para realizamos trocas simples com sed, basta s/troca-isso/por-este/.

Pronto viram como foi simples? Nem tanto o comando acima faz algo que talvez não é o desejável, o que nos queremos e mudar TODAS as ocorrências da palavra chuchu por abacate então precisamos adicionar o parâmetro ‘g’ no final do sed ficando assim:

$ cat arquivo-sacana.txt| sed 's/chuchu/abacate/g'

Pronto agora toda vez que aparecer a palavra chuchu o sed irá mudar para abacate. Quando não executa com o parâmetro ‘g’ o sed vai apenas aplicar a mudança a primeira vez que a palavra chuchu aparecer na linha ou seja apenas na primeira ocorrências por linha.

Isso é apenas uma introdução ao uso do sed, afinal de contas é o começo da sessão sobre sed. Esse carinha é tão especial que vai ganhar até uma sessão só para ele.

[]‘s

[Programação] Utilizando argumentos em C ou que diabos é esse argc e argv ?

Uma dúvida clássica dos iniciantes em c, para que diabos serve aquele argc e argv que ficam na função main quando criamos o código?

Pois bem jovem gafanhoto, como já devem ter estuda nas aulas de algoritmos, funções são blocos de códigos dispostas pelo código-fonte, ela servem para facilitar a manutenção, codificação do programa, etc; elas possuem duas características elas podem ou não ter:

  • Argumentos
  • Retorno

A função deve fazer alguma e pode retornar o resultado dessa operação que ela fez, e os argumentos são parâmetros (ou informações se preferir) que passamos para a função.

A função main é uma função especial, pois ela é a primeira a ser executada e também quem receberá os argumentos argc e argv. Quando um programa e chamado podemos definir certas opções, por exemplo:

O comando ls em execução

Digitei o comando ls, e ele executou e retornou para tela uma listagem dos arquivos e diretórios. Agora o que acontece quando coloco o parâmetro -l:

Comando ls sendo executado com o parâmetro -l

Viram a diferença ?

Como puderam ver, um ls e o ls -l executaram a tarefa de uma forma diferente, se o ls fosse um programa em C, a função main dele teria um argc e um argv, no seu argc teríamos o valor 1 e no argv uma string contendo -l.

Entenderam? Não? Hehe é simples o argc contará a quantidade parâmetros inseridos na hora que a aplicação foi executada, e o argv conterá os parâmetros inseridos, simples assim.

Vejamos um código exemplo que recebe argumentos e imprimi os mesmo na tela:

/*

Usando argumento

Codigo que apresenta o uso de argumentos em C

*/

#include <stdio.h>

int main(int argc, char *argv[])
{
    printf("O nome do programa sempre sera em argv[0]\n");
    printf("Nome do programa: %s\n\n", argv[0]);

    printf("Em argc temos a quantidade de argumentos passados\n");
    printf("Qtd de argumentos: %d\n\n", argc);

    int i;
    for(i = 0; i < argc; i++) {

        printf("O argumento %d foi %s\n", i, argv[i]);
    }

    return 0;
}

Agora vamos compilar e executar com os comandos: gcc argumentos.c -o argumentos e execute com ././argumentos arg1 arg2 blabla qualquercoisa vejamos o resultado:

Compilação e execução.

Pera ae que negócio e esse de ./argumento em argumento 0? Simples, sempre o primeiro argumento o argv[0] será o nome do programa. Igual nos seus shellscript com o $0. Agora que você está fera e manjando tudo de argc e argv fica abaixo um código-fonte de um calculadora básica que utiliza argumentos para ser executada, estude ela e explique nos comentários se entender para que serve e por que utilizei a função atof.

/*
Autor: Herberson S.M. aka VonNaturAustreVe
Email: vonnatur@0fx66.com
Data: 10/08/2011
-----------------------------------------------------------------------
English
calculator that demonstrates the use of arguments in C

Use:

calc_arg num1 operation num2

num1 and num2 = number wish

operation =
    + -> sum
    - -> subtraction
    x - multiplication
    / -> division
-----------------------------------------------------------------------
Portuguese

Calculadora com argumentos
Uso:
calc num1 operacao num2

num1 and num2 = numeros

Operacao:
    + -> sum
    - -> subtraction
    x - multiplication
    / -> division
-----------------------------------------------------------------------

*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

float soma(float var1, float var2);
float subt(float var1, float var2);
float mult(float var1, float var2);
float divisao(float var1, float var2);

void erro();

int main(int argc, char **argv)
{
    if(argc == 4) {    //Testa para saber se tem todos os parametros necessarios para a execusao

        switch(argv[2][0]) {    //Usei argv[2][0] para pegar o sinal da operacao

            case '+':
                printf("Resultado: %f\n", soma(atof(argv[1]), atof(argv[3])));
            break;

            case '-':
                printf("Resultado: %f\n", subt(atof(argv[1]), atof(argv[3])));
            break;

            case 'x':
                printf("Resultado: %f\n", mult(atof(argv[1]), atof(argv[3])));
            break;

            case '/':

                if(atof(argv[3]) == 0) {    //Caso exista uma divisao por zero.
                    printf("Impossivel divisao por zero\n");
                }

                else{    //Se nao houver divisao por zero
                    printf("Resultado: %f\n", divisao(atof(argv[1]), atof(argv[3])));
                }
            break;

            default:
                erro();
            break;
        }
        puts("");
    }
    else {
        erro();
    }

    return 0;
}

//funcoes
void erro() {
    printf("Parametros incorretos\n");
    printf("Use: calc_arg numero operacao numero\n");
    printf("A operacao deve ser +, -, x, /\n");
}

float soma(float var1, float var2) {

    return var1+var2;
}

float subt(float var1, float var2) {

    return var1-var2;
}

float mult(float var1, float var2) {

    return var1*var2;
}

float divisao(float var1, float var2) {

    return var1/var2;
}

Boa sorte, e bons estudos.

[]‘s

[Leitura] The Practice of programming

Depois de um longo período de estudos, especializações, cursos e projetos, estou de volta a ativa. No post de hoje apresento uma leitura fundamental para qualquer desenvolvedor, programador, analista e quem gosta de programar.

Sua leitura é bastante agradável e muito leve, escrito de uma forma não muito complexa o que facilita a leitura para quem não tem um inglês muito bom.

Detalhes do Livro

  • Livro: The Practice of Programming
  • Autor: Brian W. Kernighan e Rob Pike
  • Qtd de páginas: 288
  • Idioma: Inglês
  • Editora: Addison-Wesley Professional
the-practice-of-programming-capa

Se não estiverem dispostos a comprar o livro, podem ler este livro pelo Google Books. Claro o livro não está 100% disponível, mas é melhor que nada :)

Boa leitura a todos.

[]‘s

[Humor] E se motoristas fossem contratados da mesma maneira que programadores?

Cargo: Motorista.

Exigências do trabalho: Competência profissional em condução de veículos leves como carros e pesados como ônibus e caminhões, ônibus articulados, bondes, metrô, tratores, escavadoras e pás carregadoras, e tanques pesados atualmente em uso pelos países da OTAN.

Habilidades em Rali e de condução extremas são obrigatórios!
Experiência na Fórmula-1 é um diferencial.

Conhecimento e experiência em reparação de motores de pistão e rotor, transmissões automáticas e manuais, sistemas de ignição, computador de bordo, ABS, ABD, GPS e sistemas de áudio automotivo dos fabricantes conhecidos mundialmente ? obrigatória!

Experiência em tarefas de pintura e funilaria de automóveis é um diferencial.

Os candidatos devem ser certificados pela BMW, General Motors e Bosch, mas não por mais de dois anos.

Compensação: R$ 15 – R$ 20/hora, dependendo do resultado da entrevista.

Exigências da instrução: Bacharel em Engenharia Mecânica

Como dizem toda piada tem um pingo de verdade…

[Mercado] Linguagens de Programação mais populares de Agosto

No site TIOBE possui um belo gráfico apresentando as linguagens mais populares do mundo.

linguagens-agosto-2011

Como podemos ver java em primeiro (grande novidade…), mas tem algo que me deixou impressionado, como aqui no Brasil vemos gente ridicularizando linguagens como C e C++, olha só a segunda e terceira posições são ocupadas por essas linguagens “inúteis”. C/C++ não ocupam essas posições atoa. Então vamos valorizar mais a linguagem C/C++

Sua linguagem de programação predileta

View Results

Loading ... Loading ...

 

[]‘s

Pagina 1 of 1112345678910Fim »
SEO Powered by Platinum SEO from Techblissonline