Uma linha de sed pode fazer isso para você:
sed -n 's/.*1234 \(.*\)9876.*//p' textfile.txt > log
Se eu tiver um arquivo de log e quiser despejar apenas o texto entre 1234 e 9876 em outro arquivo, como posso fazer isso facilmente?
Se eu tiver um arquivo de texto como este:
idsfsvcvs sdf sdf e e sd vs d s g sg s vc d
slkdfnls 1234 keep me text 9876 das a g w eg dsf sd fsdf
sdfs fs dfsdf
sdfsdf sdf
sdf s fs
dfsf ds
Eu quero fazer algo assim
$ getinfo "1234" "9876" log
$ cat log
mantenha-me texto
normalmente você pode fazer isso com grep e o -o param.
-o, --only-matching
Print only the matched (non-empty) parts of a matching line, with each such part on a separate output line.
então seria algo como:
grep -Po '1234.*9876' >> log
Não tenho 100% de certeza sobre o regex btw, não testei
Isso depende do conteúdo do seu arquivo. Você pode começar por algo simples como:
$ grep 1234 logfile | grep 9876 | cut -d ' ' -f 3,4,5
Isso funciona para o exemplo fornecido. Você pode trabalhar nele para cobrir outros formatos de dados, se necessário. Você também pode redirecionar a saída para um arquivo adicionando > /path/to/output
Por que vale a pena, eu faria o seguinte:
grep 1234.*9876 > myfile
vim myfile
:%s/^.*1234//
(apaga tudo até 1234) :%s/9876.*$//
(apagar tudo depois e incluindo 9876) Não perfeito, ou o melhor caminho, mas fácil de lembrar se você costuma usar o vim.