Tente isto:
cut -c 34- | cut -d '"' -f1
Primeiro cut
remove os primeiros 33 caracteres; segundo cut
mantém apenas a parte antes do primeiro "
.
Digamos que eu tenha um arquivo como este:
foo bar foo bar foo bar foo bar something useful"foo bar foo bar"
Basicamente, quero saber como posso obter a string something useful
por si mesma, seja salva em seu próprio arquivo ou exibida apenas como saída.
Sempre haverá o mesmo número de caracteres (33) antes de something useful
e sempre haverá "
depois disso.
Aqui está o GNU grep
version usando a sintaxe do perl:
grep -oP '.{32}\K[^"]*'
ele usa os primeiros 32 caracteres, corta com \K
e imprime o resto até o primeiro "
.
Uma solução vim:
vim test.txt -c '%s/\v.{32}(.{-})".*/' -c 'w output.txt' -c 'q!'
Salva o resultado em output.txt
, o que obviamente poderia ser alterado.
No bash e expressão de expansão de parâmetro
$ nline="${line%%\"*}" #strip everything from first " seen to the end
$ echo "${nline:32}" #print everything from offset 32 to the end
Você pode usar sed para realizar sua tarefa
sed -e 's/^.\{32\}//;s/".*//' filename.txt
Isso remove os primeiros 32 caracteres e remove tudo após o primeiro "
.
Essas substituições ocorrerão em todas as linhas do arquivo. Para aplicar isso a uma linha específica, use isto:
sed -e 'linenumber{s/^.\{32\}//;s/".*//;}' filename.txt
em que linenumber
é qualquer número.
linenumber{ # on the linenumber-th line, do the following
s/^.\{32\}// # remove the first 33 characters
s/".*// # remove the first quote and everything following it
}