# Metacaracteres e pipes

## Metacaracteres

Os **metacaracteres** são caracteres especiais do **Shell** usados para pesquisa, manipulações de arquivos e operações de texto.

Também são conhecidos como **wild-cars** ou **curingas**.

**Lista de metacaracteres:**

* **Asterisco ( \* ):**  Substitui por 0 ou mais caracteres. Você pode listar todos os arquivos de texto usando esse metacaracter. Ou usar para fazer uma busca por todos os arquivos que iniciam com trabalho.

```bash
ls *.txt
```

```bash
ls trabalho*
```

* **Interrogação ( ? ):** Usado para substituir um único caractere. Pode ser usado para listar todos os arquivos de textos que contém cinco caracteres.&#x20;

```bash
ls ?????.txt
```

* **Colchetes ( \[ ] ):** Usado para representar um conjunto de caracteres. Pode ser usado junto um hífen ( - ) para indicar um intervalo de caracteres. Por exemplo, pode ser usado para listar arquivos que começa com a letra a até z e que sejam tipo texto.

```bash
ls [a-z]*.txt
```

* **Chaves ( {} ):** Usado para especificar um grupo de expressões. Pode ser usado para listar todos os arquivos do tipos texto e pdf.

```bash
ls *.{txt, pdf}
```

* **Aspas ( " " ):** Usado para tratar metacaracteres como caracteres comuns. Por exemplo, pode ser usado para buscar arquivos que realmente tenha um \* no nome ou que possuem espaçamentos.

```bash
ls "*arquivo.pdf"
```

```bash
ls "arquivo de texto.txt"
```

* **Circunflexo e dólar ( ^ e $ ):** Usado para fazer uma busca dentro de um arquivo. Por exemplo, para buscar dentro do arquivo linhas que iniciam com a palavra linux é usado um ^ no início da palavra que deseja buscar. E o & é usado para buscar linhas que possuem uma palavra no final.

**Exemplo:**

<pre class="language-bash"><code class="lang-bash"><strong>echo linux é o melhor sistema operacional > arquivo.txt
</strong></code></pre>

Para buscar essa frase no **arquivo.txt** pode ser usado o **^** ou o **$.**

```bash
grep '^linux' arquivo.txt
```

```bash
grep '&operacional' arquivo.txt
```

* **Barra invertida ( \ ):** Retira a funcionalidade de um metacaracter. Para buscar um arquivo que possui um \* no nome pode ser um barra invertido. O barra invertido também é usado como caractere especial de espaçamento em um nome de arquivo.

```bash
ls arq\* # o barra invetida inibiu a funcionaliade do metacaracter *
```

```bash
cd Área\ de\ Trabalho/
```

## Pipes

Os pipes são usados para **encadear comandos**, permitindo que a saída (output) de um comando seja usada como entrada (input) para outro.

Para usar o pipe basta utilizar o caractere **|** entre dois comandos.&#x20;

**Exemplos de uso:**

* Contagem de número de arquivos em um diretório

```bash
ls | wc -l
```

* Ordenar e remover linhas duplicadas de um arquivo

```bash
sort arquivo.txt | uniq
```

* Gravar linhas de entradas específicas em um arquivo

```bash
ls -l | grep -e drwx > arquivo.txt
```

**ls -l** -> usado para listagem detalhada

**|** -> pipe que vai direcionar a saída (ls -l) para a entrada (grep -e drwx)

**grep** -> comando de filtragem

**-e** -> usado para especificar padrões, no caso o **drwx**

**O comando grava em um arquivo.txt as linhas das entradas do diretório que tiveram como padrão a sequência drwx**
