Eu tenho um arquivo com o seguinte conteúdo:
(((jfojfojeojfow
//
hellow_rld
(((jfojfojeojfow
//
hellow_rld
Como posso extrair todas as linhas que começam com parênteses?
Eu tenho um arquivo com o seguinte conteúdo:
(((jfojfojeojfow
//
hellow_rld
(((jfojfojeojfow
//
hellow_rld
Como posso extrair todas as linhas que começam com parênteses?
Respostas:
Aqui está bash
um liner:
while IFS= read -r line; do [[ $line =~ ^\( ]] && echo "$line"; done <file.txt
Aqui estamos lendo cada linha de entrada e, se a linha começar (
, a linha será impressa. O teste principal é feito por [[ $i =~ ^\( ]]
.
Usando python
:
#!/usr/bin/env python2
with open('file.txt') as f:
for line in f:
if line.startswith('('):
print line.rstrip()
Aqui line.startswith('(')
verifica se a linha começa com (
, se sim, então a linha é impressa.
awk '/^\(/' testfile.txt
Resultado
$ awk '/^\(/' testfile.txt
(((jfojfojeojfow
(((jfojfojeojfow
Como python one-liner:
$ python -c 'import sys;print "\n".join([x.strip() for x in sys.stdin.readlines() if x.startswith("(")])' < input.txt
(((jfojfojeojfow
(((jfojfojeojfow
Ou alternativamente:
$ python -c 'import sys,re;[sys.stdout.write(x) for x in open(sys.argv[1]) if re.search("^\(",x)]' input.txt
look
é um dos utilitários Unix clássicos, mas pouco conhecidos, que apareceu na AT&T Unix versão 7. De man look
:
O utilitário look exibe todas as linhas no arquivo que contêm string como prefixo
O resultado:
$ look "(" input.txt
(((jfojfojeojfow
(((jfojfojeojfow
Você pode fazer o inverso.
grep -v '^[^(]' file
ou
sed '/^[^(]/d' file
Use o comando grep para isso. Supondo que o arquivo com o conteúdo mencionado seja chamado t.txt:
user:~$ grep '^(' t.txt
(((jfojfojeojfow
(((jfojfojeojfow
Com '--color' como argumento adicional, você pode até ver em cores no terminal o que corresponde. Esta instrução também não corresponde a linhas vazias.
(
, não apenas aquelas que começam com uma.