Ho un file con i seguenti contenuti:
(((jfojfojeojfow
//
hellow_rld
(((jfojfojeojfow
//
hellow_rld
Come posso estrarre ogni riga che inizia con una parentesi?
Ho un file con i seguenti contenuti:
(((jfojfojeojfow
//
hellow_rld
(((jfojfojeojfow
//
hellow_rld
Come posso estrarre ogni riga che inizia con una parentesi?
Risposte:
Ecco bash
una fodera:
while IFS= read -r line; do [[ $line =~ ^\( ]] && echo "$line"; done <file.txt
Qui stiamo leggendo ogni riga di input e se la riga inizia con (
, la riga viene stampata. Il test principale viene eseguito da [[ $i =~ ^\( ]]
.
Utilizzando python
:
#!/usr/bin/env python2
with open('file.txt') as f:
for line in f:
if line.startswith('('):
print line.rstrip()
Qui line.startswith('(')
controlla se la linea inizia con (
, in tal caso viene stampata la linea.
awk '/^\(/' testfile.txt
Risultato
$ awk '/^\(/' testfile.txt
(((jfojfojeojfow
(((jfojfojeojfow
Come 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
O in alternativa:
$ python -c 'import sys,re;[sys.stdout.write(x) for x in open(sys.argv[1]) if re.search("^\(",x)]' input.txt
look
è una delle utility Unix classiche ma poco conosciute, apparsa molto tempo fa in AT&T Unix versione 7. Da man look
:
L'utilità look visualizza tutte le righe nel file che contengono stringa come prefisso
Il risultato:
$ look "(" input.txt
(((jfojfojeojfow
(((jfojfojeojfow
Puoi fare l'inverso.
grep -v '^[^(]' file
o
sed '/^[^(]/d' file
Utilizzare il comando grep per questo. Supponendo che il file con il contenuto menzionato sia chiamato t.txt:
user:~$ grep '^(' t.txt
(((jfojfojeojfow
(((jfojfojeojfow
Con '--color' come ulteriore argomento puoi persino vedere a colori nel terminale ciò che corrisponde. Anche queste istruzioni non corrispondono a righe vuote.
(
, non solo quelle che iniziano con una.