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
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