O símbolo para o início de uma linha é ^ . Assim, para imprimir todas as linhas cujo primeiro caractere é um ( , você deseja corresponder a ^( :
-
grepgrep '^(' file -
sedsed -n '/^(/p' file
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?
O símbolo para o início de uma linha é ^ . Assim, para imprimir todas as linhas cujo primeiro caractere é um ( , você deseja corresponder a ^( :
grep
grep '^(' file
sed
sed -n '/^(/p' file
Usando perl
perl -ne '/^\(/ && print' foo
Saída:
(((jfojfojeojfow
(((jfojfojeojfow
Explicação (parte regex)
/^\(/
^ afirma a posição no início da string \( corresponde ao caractere ( literalmente Aqui está um marcador bash one:
while IFS= read -r line; do [[ $line =~ ^\( ]] && echo "$line"; done <file.txt
Aqui estamos lendo cada linha de entrada e se a linha começa com ( , a linha é 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 for o caso, a linha é impressa.
awk '/^\(/' testfile.txt
Resultado
$ awk '/^\(/' testfile.txt
(((jfojfojeojfow
(((jfojfojeojfow
Como o one-liner do python:
$ 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 clássicos Unix, mas pouco conhecidos, que surgiram no AT & amp; T Unix versão 7. De man look :
O utilitário look exibe todas as linhas no arquivo que contêm string como um 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 é chamado t.txt:
user:~$ grep '^(' t.txt
(((jfojfojeojfow
(((jfojfojeojfow
Com '- cor' 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.
Tags grep regex text-processing sed